2010-02-11 60 views
2

看看這個:奇怪的HtmlUnit行爲(?BUG)

WebClient client = new WebClient(); 
WebRequestSettings wrs = new WebRequestSettings(new URL("http://stackoverflow.com/ping/?what-the-duck?"), HttpMethod.HEAD); 
client.getPage(wrs); 

投擲FileNotFoundException異常運行這段代碼的結果,因爲在頁面上HTTP狀態代碼是404 與再次得到相同的頁面GET方法,並將User-Agent設置爲Java-...。爲什麼它獲得頁面(它不會發生與「正常」的狀態代碼)?這是一個錯誤?由於

這裏是整個服務器響應:

HTTP/1.1 404 Not Found 
Cache-Control: private 
Content-Length: 7502 
Content-Type: text/html; charset=utf-8 
Server: Microsoft-IIS/7.5 
Date: Thu, 11 Feb 2010 14:12:11 GMT 

哪裏不告訴客戶得到的東西?我該如何強制WebClient忽略它?

這裏的HTTPDebugger的截圖: alt text http://i49.tinypic.com/11lsf1y.png 這裏的問題是,我不明白爲什麼被髮送的第二個請求,爲什麼它有不同的用戶代理髮送。

回答

0

您執行一個HEAD請求 - 這將返回一個空內容的響應。然而HtmlUnit試圖創建一個頁面。爲此,它創建一個帶有url和content(這是null)的輸入源並將其提供給解析器。解析器嘗試解析輸入源時,會看到空內容,並使用該URL重新檢索內容。所以它實際上不是發出第二個請求的HtmlUnit,它是XML解析器。這就是爲什麼用戶代理是Java而不是HttpClient。