Java - DefaultHttpClient и заголовок "Host" [Apache HttpComponent] - PullRequest
8 голосов
/ 30 июля 2011

Я отправляю несколько HTTP-запросов через DefaultHttpClient. Проблема в том, что заголовок «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

Какие-нибудь советы?

Ответы [ 2 ]

9 голосов
/ 02 августа 2011

Моя вина.На самом деле DefaultHttpClient добавляет заголовок Host, как того требует спецификация HTTP.

Моя проблема была связана с другим настраиваемым заголовком, который я добавлял до того, значение которого заканчивалось на "\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-Header и Host аннулировал 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
3 голосов
/ 30 июля 2011

Просто установите заголовок хоста для запроса, используя addHeader .

...