我正在通过 DefaultHttpClient 提交多个 HTTP 请求。问题是“主机” header 从未在请求中设置。例如通过执行以下 GET 请求:
HttpUriRequest request = new HttpGet("http://www.myapp.com");
org.apache.http.client.HttpClient client = new DefaultHttpClient();
HttpResponse httpResponse = client.execute(request);
生成的请求对象没有设置强制性的“主机” header 值:
Host: myapp.com
有什么建议吗?
最佳答案
我的错。实际上,DefaultHttpClient
会根据 HTTP 规范的要求添加 Host
header 。
我的问题是由于我在其值以结尾之前添加的另一个自定义 header
“\r\n
”。这已使 DefaultHttpClient
自动添加的所有后续 header 无效。
我在做类似的事情:
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 请求中生成了以下 Header 序列:
GET /index.html HTTP/1.1
X-Custom-Header: Some value
Host: www.example.com
X-Custom-Header
和 Host
之间的空格使 Host
header 无效。
修复:
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
关于Java - DefaultHttpClient 和 "Host" header [Apache HttpComponent],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6884719/