乐趣区

关于spring:精讲RestTemplate第10篇使用代理作为跳板发送请求

本文是精讲 RestTemplate 第 10 篇,前篇的 blog 拜访地址如下:

  • 精讲 RestTemplate 第 1 篇 - 在 Spring 或非 Spring 环境下如何应用
  • 精讲 RestTemplate 第 2 篇 - 多种底层 HTTP 客户端类库的切换
  • 精讲 RestTemplate 第 3 篇 -GET 申请应用办法详解
  • 精讲 RestTemplate 第 4 篇 -POST 申请办法应用详解
  • 精讲 RestTemplate 第 5 篇 -DELETE、PUT 等申请办法应用详解
  • 精讲 RestTemplate 第 6 篇 - 文件上传下载与大文件流式下载
  • 精讲 RestTemplate 第 7 篇 - 自定义申请失败异样解决
  • 精讲 RestTemplate 第 8 篇 - 申请失败主动重试机制
  • 精讲 RestTemplate 第 9 篇 - 如何通过 HTTP Basic Auth 认证

本节咱们要为大家介绍一下,如何在应用 RestTemplate 发送申请的时候应用代理 Proxy。至于为什么要应用代理,给大家举一个简略的例子:一些做过爬虫的同学可能都晓得,当爬虫高频的屡次拜访一个网站数据,可能导致申请客户端 Ip 被封闭的可能。很多状况下,做爬虫的企业就保护一个代理 IP 池,每发送一次申请,就更换一次 IP。
代理 Proxy 作为跳板成为服务的间接访问者,代理使用者(真正的客户端)是间接拜访服务。这样在服务端看来,每次申请是代理收回的,从代理 IP 池中始终更换代理发送申请,这样可能升高 IP 封闭的可能。

咱们本节就来为大家介绍,作为一个代理使用者,该如何应用 RestTemplate 发送申请的时候应用代理 Proxy。

一、搭建一个代理服务器

笔者只从常识的层面去解说应用办法,所以不做蝇营狗苟的勾当。代理服务器还是由我本人来搭建用来测试,在我的一个 CentOS 服务器上安装 tinyproxy,tinyproxy 能够提供代理服务。

# 装置 tinyproxy 命令
sudo yum install tinyproxy -y

编辑 tinyproxy 的配置文件 vim /etc/tinyproxy/tinyproxy.conf。为该代理配置容许拜访的使用者客户端 ip,也就是我家的 ip,所以这个代理服务只能我用,其他人用不了。

# 代理服务端口
Port 1080
# 容许哪个客户端应用该代理程序?Allow xxx.xxx.xxx.xxx

启动 tinyproxy 提供代理服务,最好检查一下防火墙是否凋谢了 1080 端口。

systemctl start tinyproxy.service

二、用于测试的服务端

  • 咱们这次要拜访的服务端是:http://www.httpbin.org, 这个网站是提供在线的 HTTP 拜访服务的网站。咱们能够用它进行测试。
  • http://www.httpbin.org/ip 是咱们本次要拜访的服务,响应后果是访问者的 IP。

我在家里应用电脑拜访这个服务的时候后果如下:

上图没有应用代理,所以返回的是我家的 ip。如果我应用代理拜访,返回后果应该是 proxy 代理服务器的 ip 地址。

三、代理使用者 RestTemplate

我的第一大节中的代理服务器的 ip 是 88.99.10.251,tinyproxy 代理服务端口 1080。下文代码通过 SimpleClientHttpRequestFactory 设置拜访代理

@SpringBootTest
class ProxyTests {

   @Resource
   private RestTemplate restTemplate;

   @Test
   void testProxyIp() {

      String url = "http://www.httpbin.org/ip";

      SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
      requestFactory.setProxy(
         new Proxy(
            Proxy.Type.HTTP,
            new InetSocketAddress("88.99.10.251", 1080)  // 设置代理服务
         )
      );
      restTemplate.setRequestFactory(requestFactory);
      // 发送申请
      String result = restTemplate.getForObject(url, String.class);
      System.out.println(result);  // 打印响应后果
   }

}

代理类型能够是 HTTP 也能够是 SOCKS。下图是 “http://www.httpbin.org/ip” 的申请响应后果,返回的是代理服务器的 ip,而不是我家里的 ip。阐明咱们为 RestTemplate 设置的代理失效了。

欢送关注我的博客,外面有很多精品合集

  • 本文转载注明出处(必须带连贯,不能只转文字):字母哥博客。

感觉对您有帮忙的话,帮我点赞、分享!您的反对是我不竭的创作能源!。另外,笔者最近一段时间输入了如下的精品内容,期待您的关注。

  • 《手摸手教你学 Spring Boot2.0》
  • 《Spring Security-JWT-OAuth2 一本通》
  • 《实战前后端拆散 RBAC 权限管理系统》
  • 《实战 SpringCloud 微服务从青铜到王者》
  • 《VUE 深入浅出系列》
退出移动版