RestTemplateを使用したプロキシ
1. 概要
この短いチュートリアルでは、RestTemplateを使用してプロキシにリクエストを送信する方法を見ていきます。
2. 依存関係
まず、RestTemplateCustomizerはHttpClientクラスを使用してプロキシに接続します。
このクラスを使用するには、Apacheのhttpcore依存関係をMavenpom.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を使用してプロキシにリクエストを送信するのは非常に簡単です。 RestTemplateオブジェクトをビルドする前に、SimpleClientHttpRequestFactoryからsetProxy(java.net.Proxy)を呼び出すだけです。
まず、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を使用する
もう1つのアプローチは、 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を使用してプロキシにリクエストを送信する2つの異なる方法を検討しました。
まず、リクエストを送信する方法を学びました RestTemplate を使用して構築
いつものように、コードサンプルはGitHubでから入手できます。