【发布时间】:2012-01-09 00:14:29
【问题描述】:
我想创建一个小型 Java 应用程序以便与 HTML 服务器通信:我需要以 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 页面。
【问题讨论】:
-
定义“正确结果”并显示您实际收到的内容
-
如果你使用 HTTP,为什么不使用例如 Apache Common 的 HTTPClient?
-
我看到数据是作为一个多步骤过程接收的。但是,我看到您只提出一个请求。如果您向我们展示帖子中提到的完整 URL,将会有所帮助。
-
我指的网址是anm.it/Default.aspx,如果我通过浏览器使用它就可以了。我想知道如何在 java 中创建和发送此 URL 的表单并获得结果。