2011-07-27 145 views
1

我試圖通過插入用戶名和密碼來使用java來訪問這個website的程序,然後在我登錄時從帳戶獲取一些數據。我通過谷歌搜索了很多並嘗試了一些code,但我沒有實現這一點很幸運。有什麼建議麼?通過Java登錄到網站?

+0

你會得到什麼錯誤信息? – Jonas

+0

我沒有得到任何錯誤,只是得到這個消息'成功地做出了HTPP POST',然後'Recevied response is:'後面跟着頁面的內容 –

+0

向我們展示你現在使用的代碼。 – Marcelo

回答

2

您使用的代碼是舊技術; Commons HttpClient是一個更簡單,更強大的選項,並有大量的在線示例和文檔。如果你不反對Ruby,我會把Watir加入混合;或者如果您實際上不需要代碼,並且只需要一個簡單的記錄回放自動化,則Selenium是一個不錯的選擇。

0

缺乏對語言的理解我無法給你具體的建議。

但是,要走的路是檢查網頁上的表格。然後,您可以向此處定義的網站發送發佈請求。

作爲帖子主體,您可以發送表單參數,就像它們顯示爲URL參數一樣。

<!-- language: lang-js --> 
    String payload = "password=test&user=test" // password and user must be replaced with the names of the form fields and test with password and username respectively 
    HttpURLConnection configConnection = new URL(formTarget).openConnection(); 
    System.out.println("+------------------------------------------------------"); 
    System.out.println("| Request "); 
    System.out.println("+------------------------------------------------------"); 
    System.out.println("| URL: " + configConnection.getURL()); 
    System.out.println("+------------------------------------------------------"); 
    System.out.println("| Payload "); 
    System.out.println("+------------------------------------------------------"); 
    System.out.println(payload); 
    configConnection.setDoOutput(true); 
    configConnection.setRequestMethod("POST"); 

    configConnection.getOutputStream().write(payload.getBytes()); 
    InputStream xmlInputStream = configConnection.getInputStream(); 

    int _byte = -1; 
    ByteArrayOutputStream bios = new ByteArrayOutputStream(); 
    while ((_byte = xmlInputStream.read()) > -1) { 
     bios.write(_byte); 
    } 
    final byte[] responseBytes = bios.toByteArray(); 
    String responseString = new String(responseBytes); 
    System.out.println("+------------------------------------------------------"); 
    System.out.println("| Response "); 
    System.out.println("+------------------------------------------------------"); 
    System.out.println("| Code: " + configConnection.getResponseCode()); 
    System.out.println("+------------------------------------------------------"); 
    System.out.println(responseString); 
    System.out.println("+------------------------------------------------------"); 

爲了更好地分析您可以使用tagsoup庫將其轉變爲適當的XHTML輸出。

+0

沒有這樣的方法:'write(String)' –

+0

configConnection.getOutputStream()。write(payload.getBytes()); //忘了從我的例子中改變它 – DoubleMalt

+0

'isCompressed()'怎麼辦? –