开发者

Java - DefaultHttpClient and "Host" header [Apache HttpComponent]

开发者 https://www.devze.com 2023-03-23 20:10 出处:网络
I\'m submitting multiple HTTP Requests via a DefaultHttpClient. The problem is that the \"Host\" header is never set in the request. For example by executing the following GET request:

I'm submitting multiple HTTP Requests via a DefaultHttpClient. The problem is that the "Host" header is never set in the request. For example by executing the following GET request:

HttpUriRequest request = new HttpGet("http://www.myapp.com");
org.apache.http.client.HttpCl开发者_运维知识库ient client = new DefaultHttpClient();
HttpResponse httpResponse = client.execute(request);

The generated request object doesn't set the mandatory "Host" header with the value:

Host: myapp.com

Any tips?


My fault. Actually the DefaultHttpClient do adds the Host header, as required by the HTTP specification.

My problem was due to an other custom header I was adding before whose value ended with "\r\n". This has invalidated all the subsequent headers added automatically by DefaultHttpClient. I was doing something like:

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

that generated the following Header sequence in the HTTP request:

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

Host: www.example.com

The space between X-Custom-Header and Host invalidated the Host header. Fixed with:

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

That generates:

GET /index.html HTTP/1.1
X-Custom-Header: Some value
Host: www.example.com


Just set the host header on the request using addHeader.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号