Как настроить проверку подлинности прокси с использованием httpclient Apache
(предварительная авторизация в прокси-сетях)
В этом ответе используется Apache HttpClient v4.1 и новее.
Принятый ответ не сработал для меня, но я нашел кое-что еще, что сработало!
Вот несколько проверенных, проверенных кодов от Apache, которые демонстрируют, как проходить аутентификацию через прокси для HTTP-запроса.
Полная документация находится здесь: https://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html.
Здесь также есть отличный пример от Apache: https://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientProxyAuthentication.java
- Замените
my_username
на ваше имя пользователя прокси
- Замените
my_password
на ваш пароль прокси
- Замените
proxy.mycompany.com
вашим прокси-хостом
- Замените
8080
вашим прокси-портом
- Замените
google.com
хостом сайта, которому вы хотите отправить свой HTTP-запрос на .
- Замените
/some-path
на путь, по которому вы хотите отправить HTTP-запрос. При этом используется хост-сайт, который вы указали ранее (google.com).
Следующий пример аутентифицирует username:password@proxy.mycompany.com:8080
и отправляет запрос GET
на http://www.google.com/some-path
и печатает HTTP-код ответа.
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope("proxy.mycompany", 8080),
new UsernamePasswordCredentials("my_username", "my_password"));
CloseableHttpClient httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider).build();
try {
//Replace "google.com" with the target host you want to send the request to
HttpHost target = new HttpHost("google.com", 80, "http");
HttpHost proxy = new HttpHost("proxy.mycompany", 8080);
RequestConfig config = RequestConfig.custom()
.setProxy(proxy)
.build();
CloseableHttpResponse response = null;
//Replace "/some-path" with the path you want to send a get request to.
HttpPost httppost = new HttpPost("/some-path");
httppost.setConfig(config);
response = httpclient.execute(target, httppost);
try {
System.out.println("Return status code is "+response.getStatusLine().getStatusCode());
} finally {
response.close();
}
} finally {
httpclient.close();
}