Jsoup, вземете стойност, преди да изпълните формуляр POST

Ето кода, който използвам, за да изпратя формуляр:

Connection.Response res = Jsoup.connect("http://example.com")
    .data("id", "myID")
    .data("username", "myUsername")
    .data("code", "MyAuthcode") // get the value of Auth code from page element
    .method(Method.POST).execute();

За да изпратите успешно дадения формуляр, полето с [name="code"] трябва да има зададена стойност.

Стойността може да бъде намерена на страницата в друг елемент. Как, за бога, мога да получа стойността на елемент, използвайки същата връзка, преди действително да изпратя формуляра, както е показано по-горе?

Трябва да използвам стойност от елемент, за да попълня успешно формуляра..


person ThatGuy343    schedule 19.08.2014    source източник
comment
Наистина ли никой няма нищо?   -  person ThatGuy343    schedule 20.08.2014


Отговори (2)


Jsoup всъщност отваря нова HTTP връзка за всяка заявка, така че това, което питате, не е съвсем възможно, но можете да се доближите:

// Define where to connect (doesn't actually connect)
Connection connection = Jsoup.connect("http://example.com");

// Connect to the server and get the page
Document doc = connection.get();

// Extract the value from the page
String authCode = doc.select("input[name='code']").val();

// Add the required data to the request
connection.data("id", "myID")
    .data("username", "myUsername")
    .data("code", authCode);

// Connect to the server and do a post
Connection.Response response = connection.method(Method.POST).execute();

Това ще направи две HTTP заявки (по една за GET и POST), всяка от които има собствена връзка.

Ако наистина искате само една връзка, ще трябва да използвате различен инструмент за свързване към сървъра (напр. Apache - HTTPклиент). Все пак ще можете да използвате jsoup, за да анализирате това, което получавате обратно, като използвате Jsoup.parse().

person Spectre    schedule 19.08.2014
comment
Но стойността е различна за всяка връзка :/ така че използването на втората стойност на връзките на връзката, която публикува, няма да работи. - person ThatGuy343; 20.08.2014
comment
Освен Jsoup, има ли друг начин да направя това в Java? Не може да бъде невъзможно да се получат данни от страницата, след това POST форма.... - person ThatGuy343; 20.08.2014
comment
Изглежда, че тогава ще трябва да използвам HTTPClient. Благодаря - person ThatGuy343; 20.08.2014

Ще трябва да получите бисквитките от извикването GET и да ги добавите в последващото извикване POST, така че тази сесия да се поддържа. Вижте решението от тази публикация Получаване на Captcha изображение с помощта на jsoup

person Sagar    schedule 02.06.2016