知識庫 / HTTP Client-Side RSS 訂閱

使用RestTemplate的代理服務器

HTTP Client-Side,REST
HongKong
7
03:48 AM · Dec 06 ,2025

1. 概述

在本簡短教程中,我們將探討如何使用 RestTemplate 發送請求到代理服務器。

2. 依賴項

首先,<em>RestTemplateCustomizer</em> 使用 <em>HttpClient</em> 類連接到代理。

為了使用該類,我們需要將 Apache 的 <em>httpcore</em> 依賴項添加到我們的 Mavenpom.xml` 文件中:

<dependency>
    <groupId>org.apache.httpcomponents.core5</groupId>
    <artifactId>httpcore5</artifactId>
    <version>5.2.1</version>
</dependency>

或者到我們的 Gradle build.gradle文件中:

compile 'org.apache.httpcomponents.core5:httpcore5:5.2.1'

3. 使用 SimpleClientHttpRequestFactory

使用 RestTemplate 發送請求到代理服務器非常簡單。我們只需要從 SimpleClientHttpRequestFactory調用 setProxy(java.net.Proxy) 方法 之前構建 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))
            .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. 結論

在本簡短教程中,我們探討了兩種使用 <em >RestTemplate</em> 發送請求到代理的方法。

首先,我們學習瞭如何通過使用 <em >SimpleClientHttpRequestFactory</em> 構建的 <em >RestTemplate</em> 發送請求。然後,我們學習瞭如何使用 <em >RestTemplateCustomizer</em> 完成同樣的操作,該方法是根據 文檔 推薦的方法。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.