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