Mar*_*ark 8 java host header httprequest apache-httpcomponents
我通过DefaultHttpClient提交多个HTTP请求.问题是从未在请求中设置"主机"标头.例如,通过执行以下GET请求:
HttpUriRequest request = new HttpGet("http://www.myapp.com");
org.apache.http.client.HttpClient client = new DefaultHttpClient();
HttpResponse httpResponse = client.execute(request);
Run Code Online (Sandbox Code Playgroud)
生成的请求对象不会使用以下值设置必需的"主机"标头:
Host: myapp.com
Run Code Online (Sandbox Code Playgroud)
有小费吗?
我的错.实际上,DefaultHttpClientdo会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);
Run Code Online (Sandbox Code Playgroud)
在HTTP请求中生成以下标头序列:
GET /index.html HTTP/1.1
X-Custom-Header: Some value
Host: www.example.com
Run Code Online (Sandbox Code Playgroud)
标题之间的空格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);
Run Code Online (Sandbox Code Playgroud)
这会产生:
GET /index.html HTTP/1.1
X-Custom-Header: Some value
Host: www.example.com
Run Code Online (Sandbox Code Playgroud)