Apache HttpClient - проверка подлинности прокси
В этой главе мы узнаем, как создать HttpRequest, аутентифицированный с использованием имени пользователя и пароля, и туннелировать его через прокси на целевой хост, используя пример.
Шаг 1. Создайте объект CredentialsProvider
Интерфейс CredentialsProvider поддерживает коллекцию для хранения учетных данных пользователя. Вы можете создать его объект, создав экземпляр класса BasicCredentialsProvider, реализации этого интерфейса по умолчанию.
CredentialsProvider credentialsPovider = new BasicCredentialsProvider();
Шаг 2 - Установите учетные данные
Вы можете установить необходимые учетные данные для объекта CredentialsProvider, используя setCredentials()метод. Этот метод принимает два объекта -
AuthScope object - Объем аутентификации с указанием таких деталей, как имя хоста, номер порта и имя схемы аутентификации.
Credentials object- Указание учетных данных (логин, пароль). Установите учетные данные с помощьюsetCredentials() как для хоста, так и для прокси, как показано ниже.
credsProvider.setCredentials(new AuthScope("example.com", 80), new
UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000), new
UsernamePasswordCredentials("abc", "passwd"));
Шаг 3 - Создайте объект HttpClientBuilder
Создать HttpClientBuilder с использованием custom() метод HttpClients класс, как показано ниже -
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
Шаг 4 - Установите CredentialsProvider
Вы можете установить объект CredentialsProvider на объект HttpClientBuilder, используя setDefaultCredentialsProvider()метод. Передайте ранее созданныйCredentialsProvider возражать против этого метода.
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
Шаг 5 - Создайте CloseableHttpClient
Построить CloseableHttpClient объект с помощью build() метод.
CloseableHttpClient httpclient = clientbuilder.build();
Шаг 6 - Создайте прокси и целевые хосты
Создайте целевой и прокси-хосты, создав экземпляр HttpHost класс.
//Creating the target and proxy hosts
HttpHost target = new HttpHost("example.com", 80, "http");
HttpHost proxy = new HttpHost("localhost", 8000, "http");
Шаг 7. Установите прокси и создайте объект RequestConfig.
Создать RequestConfig.Builder объект с помощью custom()метод. Установите для ранее созданного объекта proxyHost значениеRequestConfig.Builder с использованием setProxy()метод. Наконец, создайтеRequestConfig объект с помощью build() метод.
RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
RequestConfig config = reqconfigconbuilder.build();
Шаг 8 - Создайте объект запроса HttpGet и установите для него объект конфигурации.
Создать HttpGetобъект, создав экземпляр класса HttpGet. Установите объект конфигурации, созданный на предыдущем шаге, для этого объекта, используяsetConfig() метод.
//Create the HttpGet request object
HttpGet httpGet = new HttpGet("/");
//Setting the config to the request
httpget.setConfig(config);
Шаг 9 - Выполните запрос
Выполните запрос, передав объект HttpHost (цель) и запрос (HttpGet) в качестве параметров в execute() метод.
HttpResponse httpResponse = httpclient.execute(targetHost, httpget);
пример
В следующем примере показано, как выполнить HTTP-запрос через прокси, используя имя пользователя и пароль.
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
public class ProxyAuthenticationExample {
public static void main(String[] args) throws Exception {
//Creating the CredentialsProvider object
CredentialsProvider credsProvider = new BasicCredentialsProvider();
//Setting the credentials
credsProvider.setCredentials(new AuthScope("example.com", 80),
new UsernamePasswordCredentials("user", "mypass"));
credsProvider.setCredentials(new AuthScope("localhost", 8000),
new UsernamePasswordCredentials("abc", "passwd"));
//Creating the HttpClientBuilder
HttpClientBuilder clientbuilder = HttpClients.custom();
//Setting the credentials
clientbuilder = clientbuilder.setDefaultCredentialsProvider(credsProvider);
//Building the CloseableHttpClient object
CloseableHttpClient httpclient = clientbuilder.build();
//Create the target and proxy hosts
HttpHost targetHost = new HttpHost("example.com", 80, "http");
HttpHost proxyHost = new HttpHost("localhost", 8000, "http");
//Setting the proxy
RequestConfig.Builder reqconfigconbuilder= RequestConfig.custom();
reqconfigconbuilder = reqconfigconbuilder.setProxy(proxyHost);
RequestConfig config = reqconfigconbuilder.build();
//Create the HttpGet request object
HttpGet httpget = new HttpGet("/");
//Setting the config to the request
httpget.setConfig(config);
//Printing the status line
HttpResponse response = httpclient.execute(targetHost, httpget);
System.out.println(response.getStatusLine());
}
}
Выход
При выполнении вышеуказанная программа генерирует следующий вывод:
HTTP/1.1 200 OK