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

标签 java header httprequest host apache-httpcomponents

我正在通过 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-HeaderHost 之间的空格使 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/

相关文章:

java - 如何打印/记录 HTTPRequest 使用的 MultiPartEntity 的整个主体内容?

java - Android.view.View错误

html - 在图像顶部垂直居中标题

javascript - PDFMake - 动态 pageMargins 取决于标题的高度

Android HTTP 客户端卡住

angular - 如何仅在第一个请求完成时触发新的 http 请求并忽略/取消其间的所有其他请求

java - OkHttpClient 无法取消通过标签调用

java - 指向二维多边形内

java - 应用广泛的数字格式?

html - 图例中的 header 有效吗? <图例><h1>标题</h1></图例>