HTTP POST-GET приложение в Java - PullRequest
       22

HTTP POST-GET приложение в Java

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

Я хочу создать небольшое Java-приложение для связи с HTML-сервером: мне нужно POST-форму и ПОЛУЧИТЬ результаты в HTML Используя Wireshark, я поймал содержимое пакета, который я должен отправить. Это примерно так:

__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwU[..]
[...]__EVENTVALIDATION=%2FwEWJAK9%2Fu[...]
TxTNumeroPalina=3329&ListaLocalit%C3%A0=NAPOLI&TxTViaInteresse=&TxTCAP=&BtnInviaDati=Invia+Dati

Где точки обозначают другие случайные символы. Я должен получить обратно страницу, содержащую некоторые сроки для автобусов. Я пробовал таким образом.

String eventTarget = "__EVENTTARGET" + "=" + "&";
String eventArgument = "__EVENTARGUMENT" + "=" + "&";
String viewState = "__VIEWSTATE" + "=" + "%2FwEPDwUJMj[...]";
String eventValidation = "__EVENTVALIDATION" + "=" + "%2FwEWJ[...]";

String eventObjects = eventTarget + eventArgument + viewState + eventValidation;

//form parameters
String numeroPalina = "TxtNumeroPalina" + "=" + "3329" + "&";
String listaLocalita = "Listalocalit%C3%A0" + "=" + "NAPOLI" + "&";
String viaInteresse = "TxtViaInteresse" + "=" + "" + "&";
String cap = "TxtCAP" + "=" + "";
String sendButton = "BtnInviaDati" + "=" + "Invia+Dati";
String locatorObjects = numeroPalina + listaLocalita + viaInteresse + cap;
String newData = URLEncoder.encode(eventTarget + eventArgument + viewState + eventValidation + locatorObjects, "UTF-8");

URL infoclickUrl = new URL("http://www.anm.it/Default.aspx");
HttpURLConnection connection = (HttpURLConnection)infoclickUrl.openConnection();
connection.setDoOutput(true);
HttpURLConnection.setFollowRedirects(true);
connection.setRequestMethod("POST");

OutputStreamWriter streamWriter = new OutputStreamWriter(connection.getOutputStream());
streamWriter.write(newData);
streamWriter.flush();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
String page="";
while ((line = streamReader.readLine()) != null) {
page += line;
}

streamReader.close();
streamWriter.close();

Я никогда не смогу получить правильный результат от этого! Что с ним не так?

---> Редактировать: В http://www.anm.it/Default.aspx вы можете составить форму с определенной автобусной остановкой, отправить ее и получить взамен расписание выбранной автобусной остановки (прибывающих автобусов). Итак, я должен получить html-страницу с результатом моего запроса (если я отправляю форму через браузер, она работает). С кодом, который я написал, я получаю только HTML-страницу, содержащую начальную страницу.

Ответы [ 2 ]

1 голос
/ 09 января 2012

Вы не обрабатываете cookies в своем коде Java. Попробуйте использовать live http header аддон firefox и посмотрите, какие данные обмениваются между браузером и сервером. Попробуйте отправить указанный ниже файл cookie из вашего кода Java.

Cookie: ISAWPLB {6DC6CE50-2F43-4F96-92BC-840EFF24E706} = {23855B49-8C3B-43BA-B5FB-41A85FDD9F3C}

Я все еще считаю, что вы должны использовать Apache HttpClient для вашего приложения.

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

Очистка экрана 101

  1. POST не всегда переводится на полный URL:

    URL infoclickUrl = new URL("http://www.anm.it/Default.aspx");
    

URL-адрес порта будет /Default.aspx HTTP X.X

  1. Иногда серверы используют виртуальный хост, поэтому вам нужно добавить Host: anm.it в ваш заголовок

  2. Перед началом кодирования используйте хороший инструмент трассировки, например, firebug.

  3. HTTPUnit / HTMLUnit идеально подходят для работы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...