2012-01-09 78 views
0

我想创建一个小的Java应用程序以便与HTML服务器进行通信:我需要POST POST表单和GET结果,使用Wireshark,我捕获了包中的内容我应该发送。这是这样的:Java中的HTTP POST-GET应用程序

__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页面。

+3

界定“正确的结果”,并显示您实际接收 – 2012-01-09 00:16:32

+0

如果您使用HTTP,为什么不使用,例如,Apache的常见的了HTTPClient? – fge 2012-01-09 00:20:47

+0

我看到数据是作为一个多步骤进程接收的。然而,我看到你只是提出一个请求。如果您向我们显示在帖子中提到的整个网址,这将有所帮助。 – 2012-01-09 00:31:42

回答

1

你没有在你的java代码中处理cookies。尝试使用Firefox的live http header插件并查看浏览器和服务器之间的所有数据交换。尝试从你的java代码发送下面给出的cookie。

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

我仍然相信你应该使用Apache HttpClient您aplpication。

0

屏幕抓取101

  1. POST并不总是能转化为完整网址:

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

端口URL会/Default.aspx HTTP XX

  1. 有时,服务器使用虚拟主机,所以哟你需要在你的头文件中添加主机:anm.it

  2. 在开始编码之前,使用像firebug这样的好的跟踪工具。

  3. httpunit的/是的HtmlUnit完美的工作