我正在尝试发送带有名为“:path”的标头的POST请求(HTTP / 2),但看起来Java 11中的HttpClient不允许标头以冒号开头。
此标头应使用HTTP / 2即可。
这就是我的代码的样子:
HttpClient httpClient = HttpClient.newHttpClient();
HttpRequest mainRequest = HttpRequest.newBuilder()
.uri(URI.create("xxxx"))
.setHeader(":method", "POST")
.setHeader(":path", "xxxxx")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> response = null;
try {
response = httpClient.send(mainRequest, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
e.printStackTrace();
}
我做错什么了吗?
我做错什么了吗?
是。伪头字段由HttpClient本身生成。您不需要设置:method
或:path
标头,HttpClient会为您完成。
HttpRequest mainRequest = HttpRequest.newBuilder()
.uri(URI.create("xxxx"))
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
就足够了。如果请求是通过HTTP / 2传输的,则HttpClient将适当地添加:path
和:method
。