0

我正在尝试发送带有名为“: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();
    }

难道我做错了什么?

4

1 回答 1

4

难道我做错了什么?

是的。伪标头字段由 HttpClient 本身生成。您不需要设置:method:path标头,HttpClient 会为您完成。

HttpRequest mainRequest = HttpRequest.newBuilder()
        .uri(URI.create("xxxx"))
        .POST(HttpRequest.BodyPublishers.ofString(json))
        .build();

足够了。:path如果请求通过 HTTP/2 传输,:methodHttpClient 将酌情添加。

于 2019-10-15T14:08:41.580 回答