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 {@Overridepublic void customize(RestTemplate restTemplate) {HttpHost proxy = new HttpHost(PROXY_SERVER_HOST, PROXY_SERVER_PORT);HttpClient httpClient = HttpClientBuilder.create().setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {@Overridepublic 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)));

RestTemplate设置代理相关推荐

  1. postforobject 设置代理_Spring RestTemplate和代理身份验证

    小编典典 经过许多不同的选择之后,由于能够在创建时为RestTemplate设置代理,因此我可以选择以下代码,因此我可以将其重构为单独的方法.只是要注意,它还具有其他依赖性,因此请记住这一点. pri ...

  2. postforobject 设置代理_OAuth2RestTemplate中的代理配置

    我需要使用由OAuth2保护的API.为此我使用OAuth2RestTemplate. 但我得到以下错误: java.net.ConnectException: Connection timed ou ...

  3. devServer proxy跨域 设置代理 proxy

    概念 什么是同源策略 同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一 ...

  4. linux 设置代理 安装jdk mysql tomcat redis hadoop

    1.修改linux用户名和密码 前提进入root用户   原用户名 XX,改成用户名 YY         执行 usermod -l YY XX   修改用户 YY 的密码,如果你在root权限下 ...

  5. 用iframe设置代理解决ajax跨域请求问题

    用iframe设置代理解决ajax跨域请求问题 参考文章: (1)用iframe设置代理解决ajax跨域请求问题 (2)https://www.cnblogs.com/ranzige/p/370965 ...

  6. Linux中为wget命令设置代理

    方法1:使用命令参数-e wget本身没有专门设置代理的命令行参数,但是有一个"-e"参数,可以在命令行上指定一个原本出现在".wgetrc"中的设置.于是可以 ...

  7. DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网...

    我自己的命令: server端: dns2tcpd -F -d 1 -f ./dns2tcpd.conf 输出: 09:08:59 : Debug options.c:97 Add resource ...

  8. npm获取配置,设置代理

    npm获取配置有6种方式,优先级由高到底. 命令行参数. --proxy http://server:port即将proxy的值设为http://server:port. 环境变量. 以npm_con ...

  9. linux下设置代理

    由于我们实验室有自己的代理.所以想用代理,省些money.于是就开始学习怎么设置代理. 先是在网上搜了好些方法.但是怎么都成功不了.最后成功了以后,才发现,原来是网上提供的命令行的大小写有误,而且还少 ...

  10. HtmlUnit设置代理并解析IFrame页面

    1.需求:支持代理设置访问,并采集网页下iframe框架内的页面内容 2.参考代码如下: package com;import java.io.FileInputStream;import org.a ...

最新文章

  1. My interested stuff(2008-07-10)
  2. 计算机对英语口语考试成绩,英语口语考试面对“电脑考官” 有何临场技巧
  3. QT实现绘制3D基本形状
  4. pymysql的使用(笔记)
  5. 记录一次centos的双网卡绑定
  6. linux 内核 报错,根据epc定位linux内核报错.pdf
  7. 操作系统实验报告 实验2 进程管理(答案全)
  8. 记录4 最近贺题时做的题 cf611e,cf873f,cf264d,cf1320d,cf1438c,hdu6833,hdu3602,cf1187g,cf1051e,cf925d,cf840c,etc
  9. c语言中文网vip所有资料,C语言中文网vip教程11.9
  10. 操作系统进程通信实验
  11. Arduino功率计:测量电压、电流和功耗
  12. SpringAOP:连接点和切点的区别
  13. 0到100之间的阶乘linux算法,零基础学算法-阶乘
  14. Gullo’s Hosting保加利亚NAT VPS评测
  15. 水星路由器 Mercury MER1200G刷机教程(不需要编程器)
  16. 1050: [HAOI2006]旅行comf
  17. scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法
  18. Scrapy中的item和pipline
  19. 计算机网络6 应用层
  20. 华为让全球震惊:5G基站出货已过万

热门文章

  1. html 字体思源_CSS3嵌入字体@font-face调用字体(思源宋体regula/PingFang SC/ttf/woff)...
  2. 《图解设计模式》读书笔记
  3. 如何截取QQ密码和聊天内容、去掉QQ广告栏、添加QQ尾巴
  4. 如何下载matlab安装包_MATLAB安装时应该选择哪些模块
  5. 群晖NAS详细教程 DSM6.1.7版本(亲测有效)传统BIOS
  6. python爬虫简历项目怎么写_python爬虫简历
  7. The program ‘roscore‘ is currently not installed 解决办法
  8. GWR4 软件输入数据制作
  9. VISIO——word中插入visio图片 图片边缘空白裁剪
  10. 《软件工程与实践》第三版 软工导论知识梳理总结