0

I am trying to send a POST request (HTTP/2) with a header called ":path" but looks like HttpClient in java 11 does not allow headers starting by colon.

This header should be fine using HTTP/2.

That is how my code looks like:

    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();
    }

Am I doing something wrong?

Naman
  • 27,789
  • 26
  • 218
  • 353
Guti
  • 57
  • 1
  • 3

1 Answers1

4

Am I doing something wrong?

Yes. Pseudo header fields are generated by the HttpClient itself. You do not need to set :method or :path headers, the HttpClient will do it for you.

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

is sufficient. :path and :method will be added as appropriate by the HttpClient if the request is transmitted over HTTP/2.

daniel
  • 2,665
  • 1
  • 8
  • 18