2012-03-31 55 views
2

這是我的代碼:無法發送HTTP發送請求到登錄表單?

public static String sendPostRequest(String url) { 

    StringBuffer sb = null; 

    try { 

     String data = URLEncoder.encode("user", "UTF-8") + "=" 
       + URLEncoder.encode("username", "UTF-8") + "&" 
       + URLEncoder.encode("password", "UTF-8") + "=" 
       + URLEncoder.encode("password", "UTF-8"); 

     System.out.println(data); //Just to check if data is correct 

     URL requestUrl = new URL(url); 
     HttpURLConnection conn = (HttpURLConnection) requestUrl 
       .openConnection(); 
     conn.setDoOutput(true); 
     conn.setDoInput(true); 
     conn.setRequestMethod("POST"); 

     DataOutputStream osw = new DataOutputStream(conn.getOutputStream()); 
     osw.writeBytes(data); 
     osw.flush(); 

     BufferedReader br = new BufferedReader(new InputStreamReader(
       conn.getInputStream())); 

     String in = ""; 
     sb = new StringBuffer(); 

     while ((in = br.readLine()) != null) { 
      sb.append(in + "\n"); 
     } 

     osw.close(); 
     br.close(); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return sb.toString(); 
} 

但每當我試圖通過這個HTTP POST請求登錄,它返回的HTML代碼,這始終是一個包含了網站,而不是我的特定HTML代碼,該網頁上我的用戶頁面。在HTML登錄表單是這樣的:

<td width="100" align="left"><span class="texte_listing_bold">Login:</span></td> 
    <td width="300" align="center"><input class="form_size1" type="text" name="user"></td> 
    </tr> 
    <tr> 
    <td width="100" align="left"><span class="texte_listing_bold">Password:</span></td> 
    <td width="300" align="center"><input class="form_size1" type="password" name="password"></td> 
    </tr> 
    <tr> 
    <td colspan="2" align="center"> 
     <input type="hidden" name="login_action" value="true"> 
     <input class="bouton_nosize" type="submit" value="Login"> 
    </td> 

通常的按鈕具有name元素,我可以通過我的代碼,它不工作,讓我登錄到這樣的網站稱那些爲好,但這韓元因某種原因工作。這是什麼原因?

+0

你包裹該HTML到一個? – 2012-03-31 15:24:44

回答

2

此登錄形式使用具有值true稱爲login_action一個隱藏的輸入字段。

你需要通過在您的要求輸入用戶名和密碼一起。

只要確保你提供了所有必要的信息。 您可以使用HTTP嗅探器檢查瀏覽器發送的內容,但最好的方法是查看您嘗試進行身份驗證的頁面源。

如果你沒有在Web服務器登錄頁面源,那麼你可能根本不應該寫在首位的代碼訪問或控制。身份驗證機制將來可能會發生變化,並且對於腳本(如您正在編寫的腳本)可能存在許多安全限制,因爲通常不會允許漫遊器登錄到用戶頁面和Web報廢內容。

+0

哈哈哈我笑了,因爲讀這之前,從字面上30秒我嘗試使用Wireshark嗅探並發現它一起被稱爲login_action true值過濾捕獲的數據包,只顯示開機自檢後輸入字段傳遞...但感謝,要是我不不會用wireshark你的答案肯定會救我的屁股! – ZimZim 2012-03-31 15:41:50