Рубрики
Без рубрики

Прокси с restTemplate

Узнайте, как отправить запрос на прокси-сервер с помощью RestTemplate Apache на Java.

Автор оригинала: baeldung.

1. Обзор

В этом коротком учебнике, мы посмотрим, как отправить запрос на прокси с помощью RestTemplate .

2. Зависимости

Во-первых, RestTemplateКустомизер использует HttpClient класса для подключения к прокси.

Чтобы использовать класс, нам нужно добавить Апач в httpcore зависимость к нашему Maven пом.xml файл:


    org.apache.httpcomponents
    httpcore
    4.4.13

Или в наш Gradle build.gradle файл:

compile 'org.apache.httpcomponents:httpcore:4.4.13'

3. Использование SimpleClientHttpRequestFactory

Отправка запроса на прокси с помощью РестТемплет довольно просто. Все, что нам нужно сделать, это позвоните в setProxy (java.net.Proxy) из SimpleClientHttpRequestFactory перед строительством РестТемплет объект.

Во-первых, мы начинаем с настройки SimpleClientHttpRequestFactory :

Proxy proxy = new Proxy(Type.HTTP, new InetSocketAddress(PROXY_SERVER_HOST, PROXY_SERVER_PORT));
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setProxy(proxy);

Затем мы переходим к передаче экземпляра фабрики запросов в РестТемплет конструктор:

RestTemplate restTemplate = new RestTemplate(requestFactory);

Наконец, как только мы построили РестТемплет , мы можем использовать его, чтобы сделать прокси-запросы:

ResponseEntity responseEntity = restTemplate.getForEntity("http://httpbin.org/get", String.class);

assertThat(responseEntity.getStatusCode(), is(equalTo(HttpStatus.OK)));

4. Использование RestTemplateCustomizer

Другой подход заключается в использовании RestTemplateКустомизер с RestTemplateBuilder для создания настраиваемого РестТемплет .

Давайте начнем определять Прокси-кустомайзер :

class ProxyCustomizer implements RestTemplateCustomizer {

    @Override
    public void customize(RestTemplate restTemplate) {
        HttpHost proxy = new HttpHost(PROXY_SERVER_HOST, PROXY_SERVER_PORT);
        HttpClient httpClient = HttpClientBuilder.create()
            .setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {
                @Override
                public HttpHost determineProxy(HttpHost target, HttpRequest request, HttpContext context) throws HttpException {
                    return super.determineProxy(target, request, context);
                }
            })
            .build();
        restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
    }
}

После этого мы строим наши индивидуальные РестТемплет :

RestTemplate restTemplate = new RestTemplateBuilder(new ProxyCustomizer()).build();

И, наконец, мы используем РестТемплет чтобы сделать запросы, которые проходят сначала через прокси:

ResponseEntity responseEntity = restTemplate.getForEntity("http://httpbin.org/get", String.class);
assertThat(responseEntity.getStatusCode(), is(equalTo(HttpStatus.OK)));

5. Заключение

В этом коротком учебнике мы изучили два разных способа отправки запроса на прокси-сервер с помощью РестТемплет .

Во-первых, мы узнали, как отправить запрос через РестТемплет построен с использованием SimpleClientHttpRequestFactory. Затем мы научились делать то же самое с помощью RestTemplateКустомизер , это один из рекомендуемых подход в соответствии с документация .

Как всегда, образцы кода доступны более на GitHub .