2010-02-11 58 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。