Обработка HTML-форм в Java

1

Я разрабатываю проект Java, который использует следующий веб-сайт: http://feedenlarger.com/

Программа по сути просто вводит ссылку [например, http://feeds.bbci.co.uk/news/rss.xml ] в поле "Ввести код частичной подачи" и отправляет форму. После отправки формы я хочу загрузить страницу, к которой пользователь будет обращаться, если они вручную заполнили форму и нажали кнопку на странице.

Как я могу сделать это на Java?

Мне удалось успешно загрузить страницу с помощью формы:

    private String readWebPage() throws IOException{
        URL u = null;
        URLConnection urlC = null;
        BufferedInputStream bis = null;
        try{
            u = new URL(this.url);
            urlC = u.openConnection();
            headers = urlC.getHeaderFields();

            bis = new BufferedInputStream(urlC.getInputStream());

            StringBuilder builder = new StringBuilder();
            int byteRead;
            while ((byteRead = bis.read()) != -1)
                builder.append((char) byteRead);

            bis.close();
            return builder.toString();
        } catch(IOException e){
            System.out.println("Webpage: IO Error");
            throw e;
        }
    }

Примечание. Я заинтересован в сохранении заголовков в памяти, поэтому предпочтительнее использовать URLConnection или подобное.

Как я могу заполнить форму, отправить с помощью запроса POST/GET и загрузить следующую веб-страницу? Я попытался загрузить страницу из ссылки, сгенерированной моим браузером после отправки формы, но это дает мне "запретную" ошибку.

Компилируемый проект, который я использовал, доступен здесь

  • 0
    Вы делаете это в целях тестирования или потому, что хотите имитировать пользователей в фоновом режиме?
  • 0
    Тестовые цели. Я пытаюсь научиться использовать Java для заполнения форм. Это самый простой сайт / форма, которую я смог найти. Примеры использования разных сайтов приветствуются :)
Показать ещё 6 комментариев
Теги:
forms
post
urlconnection

2 ответа

1
Лучший ответ

(Отправлено это как ответ, потому что он слишком велик, чтобы вписаться в комментарий. Также опубликовано как сообщество wiki, чтобы избежать получения какой-либо репутации (или потерять его, если кто-то не прочитал это сообщение)).

Это результат сетевого монитора, когда я отправил свой последний комментарий на странице:

Remote Address:198.252.206.140:80
Request URL:http://stackoverflow.com/posts/23431154/comments
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:text/html, */*; q=0.01
Accept-Encoding:gzip,deflate,sdch
Accept-Language:es,en-US;q=0.8,en;q=0.6,pt;q=0.4,fr;q=0.2
Connection:keep-alive
Content-Length:322
Content-Type:application/x-www-form-urlencoded
Cookie:__qca=P0-1914216052-1380726140973; __utma=140029553.1039400677.1380726141.1389622782.1389628108.351; __utmz=140029553.1389047375.333.15.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); sgt=id=dfc633fa-3459-4f24-be6f-ca2ee08908cd; usr=t=f94uBq5WkGsH&s=BDL1eqRYkOQ5&p=[2|2][10|15]; _ga=GA1.2.1039400677.1380726141
Host:stackoverflow.com
Origin:http://stackoverflow.com
Referer:http://stackoverflow.com/questions/23431154/html-form-handling-in-java?noredirect=1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
comment:Check out all the fields you need to sent and which of them are auto generated by the server (usually hidden fields). Basically, you need to check all the elements about how the request is being sent. This can be easily done in Chrome or Firefox + Firebug by pressing F12.
fkey:bc6f108950fe59611b3f1ebf4caedb31
Response Headersview source
Cache-Control:private
Content-Encoding:gzip
Content-Length:2158
Content-Type:text/html; charset=utf-8
Date:Fri, 02 May 2014 15:21:55 GMT
Pragma:no-cache
Vary:Accept-Encoding
X-Frame-Options:SAMEORIGIN

Вот пример того, как выглядит Сетевой монитор

Изображение 174551

1

Основываясь на вашем сценарии, мы можем реализовать эти инструменты HMTLUnit и Selenium.

Вы можете ввести текст, используя HtmlTextInput, и отправить форму для перехода на вторую страницу с использованием меток привязки.

Мы полностью поддерживаем HTML-теги в HTMLUnit. Используя метод HTMLInput, установите значение на первой странице с помощью setAttributeValue("some text") и перейдите к следующей странице с помощью кнопки или тега привязки, который вы ищете.

HtmlAnchor anchor = (HtmlAnchor)page.getHtmlElementById("second_page_link");
    page = (HtmlPage) anchor.click();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню