8

DefaultHttpClient を介して複数の HTTP リクエストを送信しています。問題は、リクエストに「Host」ヘッダーが設定されていないことです。たとえば、次の GET リクエストを実行します。

HttpUriRequest request = new HttpGet("http://www.myapp.com");
org.apache.http.client.HttpClient client = new DefaultHttpClient();
HttpResponse httpResponse = client.execute(request);

生成されたリクエスト オブジェクトは、必須の「Host」ヘッダーに次の値を設定しません。

Host: myapp.com

任意のヒント?

4

2 に答える 2

10

私のせいです。実際には、HTTP 仕様で要求されているように、 DefaultHttpClientdo はヘッダーを追加します。Host

私の問題は、値が「\r\n」で終わる前に追加していた他のカスタムヘッダーが原因でした。これにより、 によって自動的に追加された後続のすべてのヘッダーが無効になりましたDefaultHttpClient。私は次のようなことをしていました:

HttpUriRequest request = new HttpGet("http://www.myapp.com");
org.apache.http.client.HttpClient client = new DefaultHttpClient();
request.addHeader(new BasicHeader("X-Custom-Header", "Some Value\r\n");
HttpResponse httpResponse = client.execute(request);

HTTP リクエストで次のヘッダー シーケンスを生成しました。

GET /index.html HTTP/1.1
X-Custom-Header: Some value

Host: www.example.com

との間のスペースがヘッダーX-Custom-HeaderHost無効にしました。Host以下で修正:

HttpUriRequest request = new HttpGet("http://www.myapp.com");
org.apache.http.client.HttpClient client = new DefaultHttpClient();
request.addHeader(new BasicHeader("X-Custom-Header", "Some Value");
HttpResponse httpResponse = client.execute(request);

それは以下を生成します:

GET /index.html HTTP/1.1
X-Custom-Header: Some value
Host: www.example.com
于 2011-08-02T11:09:48.843 に答える
3

addHeaderを使用して、リクエストにホスト ヘッダーを設定するだけです。

于 2011-07-30T17:44:53.107 に答える