RestTemplate设置代理

1.介绍

了解如何使用 RestTemplate 向代理发送请求。

2.依赖

首先,RestTemplateCustomizer 使用 HttpClient 类连接到代理。

要使用该类,需要将 Apache 的 httpcore 依赖添加到 Maven pom.xml 文件中:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.13</version>
</dependency>

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

另一种方法是使用带有 RestTemplateBuilder 的 RestTemplateCustomizer 来构建自定义的 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)));

请添加图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值