Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 奇怪的HtmlUnit行为(bug?)_Java_Htmlunit - Fatal编程技术网

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