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 .