Перейти к основному содержимому

Прокси с RestTemplate

· 2 мин. чтения

1. Обзор

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

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

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

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

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.13</version>
</dependency>

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

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

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

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

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

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

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

RestTemplate restTemplate = new RestTemplate(requestFactory);

Наконец, когда мы создали RestTemplate , мы можем использовать его для выполнения проксируемых запросов:

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

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

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

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

Приступим к определению ProxyCustomizer :

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 restTemplate = new RestTemplateBuilder(new ProxyCustomizer()).build();

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

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

5. Вывод

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

Во-первых, мы узнали, как отправить запрос через RestTemplate , построенный с использованием SimpleClientHttpRequestFactory. Затем мы узнали, как сделать то же самое, используя RestTemplateCustomizer , который является рекомендуемым подходом в соответствии с документацией .

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