Jsoup публикует измененный документ - PullRequest
2 голосов
/ 24 января 2012

Я пытаюсь создать веб-скребок для моего приложения для Android.Поэтому мне нужно использовать простую форму поиска на веб-сайте, заполнить ее и отправить свои результаты обратно на сервер.

Как упоминалось в Jsoup-Cookbook , я удалил сайт.необходимо с сервера и изменило значения.

Теперь мне просто нужно опубликовать мой измененный документ обратно на сервер и очистить получившуюся страницу.Насколько я видел в Jsoup-API, нет возможности отправить что-либо обратно, кроме как с помощью .data-Attribute в Jsoup.connection, который, к сожалению, не может заполнять текстовые поля по их идентификатору.

Любые идеи или обходные пути, как опубликовать измененный документ или его части обратно на веб-сайт?

Ответы [ 2 ]

4 голосов
/ 24 января 2012

Вы, похоже, неправильно понимаете, как работает HTTP в целом.Неверно, что весь HTML-документ с измененными входными значениями был отправлен с клиента на сервер.Тем более, что пары имя = значение всех входных элементов были отправлены в качестве параметров запроса.Затем сервер вернет нужный HTML-ответ.

Например, если вы хотите смоделировать отправку следующей формы в Jsoup (точный синтаксис HTML-формы можно узнать, открыв страницу с формой в вашембраузер и сделайте правый клик, Просмотр источника )

<form method="post" action="http://example.com/somescript">
    <input type="text" name="text1" />
    <input type="text" name="text2" />
    <input type="hidden" name="hidden1" value="hidden1value" />
    <input type="submit" name="button1" value="Submit" />
    <input type="submit" name="button2" value="Other button" />
</form>

, затем вам необходимо построить запрос следующим образом:

Document document = Jsoup.connect("http://example.com/somescript")
    .data("text1", "yourText1Value") // Fill the first input field.
    .data("text2", "yourText2Value") // Fill the second input field.
    .data("hidden1", "hidden1value") // You need to keep it unmodified!
    .data("button1", "Submit")       // This way the server knows which button was pressed.
    .post();

// ...

В некоторых случаях вы такженеобходимо отправить куки сеанса назад, но это отдельная тема (и вопрос, который уже задавался здесь несколько раз ранее; в общем, для этого проще использовать настоящий HTTP-клиент и передать его ответ через Jsoup#parse()).

См. Также:

0 голосов
/ 24 января 2012

Это не так.Вы должны создать запрос POST (использовать компоненты Apache HTTP), получить ответ и затем обработать его с помощью JSoup.

...