Java 11 HttpClient не позволяет заголовкам начинаться с двоеточия - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь отправить запрос POST (HTTP / 2) с заголовком «: путь», но похоже, что HttpClient в java 11 не позволяет заголовкам начинаться с двоеточия.

Этот заголовок должен быть в порядке, используя 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();
    }

Я что-то не так делаю?

1 Ответ

4 голосов
/ 15 октября 2019

Я что-то не так делаю?

Да. Поля псевдо заголовка генерируются самим HttpClient. Вам не нужно устанавливать заголовки :method или :path, HttpClient сделает это за вас.

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

достаточно. :path и :method будут добавлены соответствующим образом HttpClient, если запрос передается по HTTP / 2.

...