2

看看这个:

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 的屏幕截图: 替代文字 这里的问题是我不明白为什么要发送第二个请求以及为什么要使用不同的用户代理发送它。

4

1 回答 1

0

您执行一个 HEAD 请求 - 这将返回一个内容为空的响应。HtmlUnit 仍然尝试创建一个页面。为此,它创建一个包含 url 和内容(为空)的输入源,并将其提供给解析器。当解析器尝试解析输入源时,它会看到空内容并使用 URL 重新检索内容。所以实际上发出第二个请求的不是 HtmlUnit,而是 XML 解析器。这就是为什么用户代理是 Java 而不是 HttpClient 的原因。

于 2010-03-29T19:39:32.470 回答