Проверка подлинности прокси с помощью JDK 11 HttpClient - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь использовать JDK 11 HttpClient для отправки запросов через корпоративный прокси, который требует аутентификации по логину и паролю. Согласно intro JDK, я создаю экземпляр клиента с помощью:

HttpClient httpClient = HttpClient.newBuilder()
        .version(HTTP_1_1)
        .proxy(ProxySelector.of(new InetSocketAddress("proxy.mycompany.com", 3128)))
        .authenticator(authenticator)
        .build();

, где authenticator:

Authenticator authenticator = new Authenticator() {
  @Override
  protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("login", "password".toCharArray());
  }
};

И тогда я выполняю сам запрос:

HttpRequest outRequest = HttpRequest.newBuilder()
        .version(HTTP_1_1)
        .GET()
        .uri(URI.create("https://httpwg.org/asset/http.svg")) // no matter which URI to request
        .build();
HttpResponse<String> inResponse = httpClient.send(outRequest, BodyHandlers.ofString());

Но вместо действительного ответа от целевого сервера (https://httpwg.org) я получаю HTTP 407 (требуется проверка подлинности прокси) , то есть HttpClient не использует предоставленный authenticator.

Я пробовал различные решения, упомянутые здесь и здесь , но ни одно из них не помогло.

Как правильно заставить его работать?

1 Ответ

0 голосов
/ 16 ноября 2018

По умолчанию базовая аутентификация с прокси-сервером отключена при туннелировании через прокси-сервер аутентификации, начиная с Java 8u111.

Вы можете повторно включить его, указав -Djdk.http.auth.tunneling.disabledSchemes="" в командной строке Java.

См. Примечания к выпуску jdk 8u111

...