我的http-header有问题。 我需要发送一个空主体的后请求和标题“Content-Length:0”。但这似乎是不可能的,因为我得到了这个例外:
- org.apache.http.ProtocolException:已存在Content-Length标头 -
但是当我不包含标题时,请求中没有Content-Length标头,因此我得到400:Bad Request。 我也用Python构建它,并且它工作正常,但我不能使它在java中工作。你能帮帮我吗?
这是我的代码:
HttpClient client = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader(header..);
httpPost.addHeader(another header);
httpPost.addHeader("Content-Type","application/xml");
httpPost.addHeader("Content-Length","0");
httpPost.addHeader(another header);
HttpResponse response = client.execute(httpPost);
System.out.println(response.getStatusLine().getStatusCode());
修改
解决了@Beno Arakelyan的回答问题。
答案 0 :(得分:0)
您不需要计算内容长度,客户端会为您处理。请尝试删除标题并设置正文,例如:httpPost.setEntity(new StringEntity(""))
。
答案 1 :(得分:0)
我尝试使用基于apache http客户端的http-request发送Content-Length
。它工作正常。例如:
private static final HttpRequest<?> HTTP_REQUEST =
HttpRequestBuilder.createGet(YOUR_URI)
.addDefaultHeader(HttpHeaders.CONTENT_LENGTH, "0")
.build();
public void test(){
System.out.println(HTTP_REQUEST.execute().getStatisCode()); // is 200
}