Java 奇怪的HtmlUnit行为(bug?)
看看这个:Java 奇怪的HtmlUnit行为(bug?),java,htmlunit,Java,Htmlunit,看看这个: 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方法再次
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方法再次获取相同的页面,用户代理设置为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的屏幕截图:
这里的问题是,我不明白为什么要发送第二个请求,以及为什么要使用不同的useragent发送它。执行一个HEAD请求-这将返回一个包含空内容的响应。HtmlUnit仍然试图创建一个页面。为此,它创建一个包含url和内容(为null)的输入源,并将其提供给解析器。当解析器试图解析输入源时,它会看到一个空内容,并使用URL重新检索该内容。因此,实际上发出第二个请求的不是HtmlUnit,而是XML解析器。这就是为什么用户代理是Java而不是HttpClient 执行HEAD请求-这将返回一个包含空内容的响应。HtmlUnit仍然试图创建一个页面。为此,它创建一个包含url和内容(为null)的输入源,并将其提供给解析器。当解析器试图解析输入源时,它会看到一个空内容,并使用URL重新检索该内容。因此,实际上发出第二个请求的不是HtmlUnit,而是XML解析器。这就是为什么用户代理是Java而不是HttpClient