1. 概要

この短いチュートリアルでは、RestTemplateを使用してプロキシにリクエストを送信する方法を見ていきます。

2. 依存関係

まず、RestTemplateCustomizerHttpClientクラスを使用してプロキシに接続します。

このクラスを使用するには、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 を使用して構築 SimpleClientHttpRequestFactory。 次に、を使用して同じことを行う方法を学びました RestTemplateCustomizer 、これは、 ドキュメンテーション

いつものように、コードサンプルはGitHubから入手できます。