«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:
Затем мы перейдем к передаче экземпляра фабрики запросов конструктору RestTemplate:
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);
4. Использование RestTemplateCustomizer
ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://httpbin.org/get", String.class);
assertThat(responseEntity.getStatusCode(), is(equalTo(HttpStatus.OK)));
Другой подход заключается в использовании RestTemplateCustomizer с RestTemplateBuilder для создания настроенного RestTemplate.
Давайте начнем определение ProxyCustomizer:
После этого мы создадим наш настроенный RestTemplate:
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();
5. Заключение
ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://httpbin.org/get", String.class);
assertThat(responseEntity.getStatusCode(), is(equalTo(HttpStatus.OK)));
В этом кратком руководстве мы рассмотрели два разных способа отправки запроса на прокси-сервер с помощью RestTemplate.
Сначала мы научились отправлять запрос через RestTemplate, построенный с использованием SimpleClientHttpRequestFactory. Затем мы узнали, как сделать то же самое, используя RestTemplateCustomizer, который является рекомендуемым подходом в соответствии с документацией.
Как всегда, образцы кода доступны на GitHub.
«