2011-07-30 27 views
1

我收到400個錯誤,試圖連接到一個網站。如何在Java中找出400個Http錯誤的細節?

如何設置連接以顯示服務器拒絕我的原因?

try { 
doc = Jsoup.connect(URL).timeout(10 * 30000).get(); 
} catch (IOException ioe) { 
System.out.println("Error:" + ioe); 
} 

http://jsoup.org/apidocs/org/jsoup/Connection.html

+1

顯示您的代碼,說明您如何呼叫,您的用戶界面是什麼以及您打算如何顯示此信息。 –

+0

重複/雙後http://stackoverflow.com/questions/6885076/400-http-errors-using-jsoup-in-multithreaded-program –

+0

你可能想檢查apache http commons: http://hc.apache .org/httpcomponents-client-ga/index.html – SiN

回答

3

HTTP 400 「錯誤的請求」。這可能是服務器的問題,但它的可能是的問題。調試這些東西的最佳方式不取決於您使用的語言:只需嗅探網絡流量即可瞭解您的HTTP請求的外觀。你也可以看到服務器的回覆,看看它是否提供了更多信息。通常服務器相當含糊,原因有兩個。

  • 人寫的HTTP服務器不會再外出幫人調試HTTP客戶端,以及
  • 過於具體的錯誤代碼可能會導致安全問題。

對於嗅探HTTP流量,我使用了Wireshark;查爾斯也有效,還有很多其他人。

(如果你只是想顯示服務器對錯誤的原因,只是顯示像任何其他HTTP響應。)

編輯:代碼是好的,但我們真的需要看到的HTTP請求本身以便弄清楚它有什麼問題。獲取Wireshark或Charles,或者將客戶端指向一個將請求轉儲到文件的套接字。

+0

(如果您只想顯示服務器發生錯誤的原因,只需像顯示其他任何HTTP響應一樣)。 – samwise

+0

connection.response()。body(),但如果你看到400錯誤,你應該修復你的代碼 –

0

400意味着請求is malformed

請求不能被服務器理解由於語法錯誤。客戶端不應該在沒有修改的情況下重複請求。

基本上,你需要做的是正確地形成請求。例如,如果您發送請求參數並且通常使用不尋常的編碼,請確保它們都是正確的URI-encoded

如何設置連接以顯示爲什麼服務器拒絕我?

通常,響應的主體將包含更多細節。並非總是如此,這不是必需的,但它可以提供洞察爲什麼請求被認爲是「格式錯誤」。如果響應的主體不包括這些信息,除了查看您發送的請求來確定爲什麼它被認爲是格式錯誤以外沒有其他辦法。