8

我通过 DefaultHttpClient 提交多个 HTTP 请求。问题是“主机”标头从未在请求​​中设置。例如通过执行以下 GET 请求:

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

生成的请求对象没有设置强制性的“主机”标头的值:

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 请求中生成以下 Header 序列:

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
于 2011-08-02T11:09:48.843 回答
3

只需使用addHeader在请求上设置主机标头。

于 2011-07-30T17:44:53.107 回答