Я пытаюсь использовать 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
.
Я пробовал различные решения, упомянутые здесь и здесь , но ни одно из них не помогло.
Как правильно заставить его работать?