2011-07-30 19 views
6

DefaultHttpClient経由で複数のHTTPリクエストを送信しています。問題は、「ホスト」ヘッダーが要求に決して設定されないことです。Java - DefaultHttpClientと "Host"ヘッダー[Apache HttpComponent]

Host: myapp.com 

任意のヒント:

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

が生成された要求オブジェクトが値を持つ必須の「ホスト」ヘッダを設定していない次のGET要求を実行することにより、例えば?

答えて

8

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

私の問題は、値が "\r\n"で終わる前に追加していたカスタムヘッダーが原因でした。これにより、その後に自動的に追加されるすべてのヘッダーが無効になりました。DefaultHttpClient。 HTTPリクエストに次のヘッダー・シーケンスを生成

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); 

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

Host: www.example.com 

スペースX-Custom-Header間とHostHostヘッダを無効 私のような何かをやっていました。生成

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 
+1

良いキャッチ!私の場合(Androidの場合)、私はBase64を['Base64.DEFAULT'](http://developer.android.com/reference/android/util/Base64.html#DEFAULT)でヘッダ値をエンコードしていました。 。その結果、カスタムヘッダーの後ろにあるすべてのキーと値のペアが乱されました(プロキシを介してリクエストを実行しても表示されません)。 ['Base64.NO_WRAP'](http://developer.android.com/reference/android/util/Base64.html#NO_WRAP)に切り替えると、すべての行ターミネータが省略されているので、私の問題は解決しました(つまり、出力は1つです長い行)。 –

1

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

+0

グレート答え がで固定しました。私は 'Host'のカスタム値を設定し、http://djce.org.uk/dumprequestを取得することで動作することを確認できました。そのページは受信したヘッダをダンプして返します。確かに、 'Host'の値は、' djce.org.uk'ではなく、 'Host'値が変更されていない場合の値です。 。 –

関連する問題