2012-01-09 96 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完美的工作