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であり、User-Agent が に設定された 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 のスクリーンショットを次に示します 代替テキスト 。ここでの問題は、2 番目の要求が送信される理由と、別のユーザー エージェントで送信される理由がわからないことです。

4

1 に答える 1

0

HEADリクエストを実行します。これにより、内容がnullのレスポンスが返されます。それにもかかわらず、HtmlUnitはページを作成しようとします。そのために、URLとコンテンツ(null)を使用して入力ソースを作成し、パーサーに渡します。パーサーが入力ソースを解析しようとすると、nullコンテンツが検出され、URLを使用してコンテンツを新たに取得します。したがって、実際には2番目の要求を行うのはHtmlUnitではなく、XMLパーサーです。そのため、ユーザーエージェントはJavaであり、HttpClientではありません。

于 2010-03-29T19:39:32.470 に答える