zoukankan      html  css  js  c++  java
  • 精讲RestTemplate第10篇-使用代理作为跳板发送请求

    本节我们要为大家介绍一下,如何在使用RestTemplate发送请求的时候使用代理Proxy。至于为什么要使用代理,给大家举一个简单的例子:一些做过爬虫的同学可能都知道,当爬虫高频的多次访问一个网站数据,可能导致请求客户端Ip被封锁的可能。很多情况下,做爬虫的企业就维护一个代理IP池,每发送一次请求,就更换一次IP。 代理Proxy作为跳板成为服务的直接访问者,代理使用者(真正的客户端)是间接访问服务。这样在服务端看来,每次请求是代理发出的,从代理IP池中一直更换代理发送请求,这样能够降低IP封锁的可能。

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

    一、搭建一个代理服务器

    笔者只从知识的层面去讲解使用方法,所以不做蝇营狗苟的勾当。代理服务器还是由我自己来搭建用来测试,在我的一个CentOS服务器上安装tinyproxy,tinyproxy可以提供代理服务。

    # 安装tinyproxy 命令
    sudo yum install  www.chuancenpt.com 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.fanhuagjqw.cn  这个网站是提供在线的HTTP访问服务的网站。我们可以用它进行测试。
    • http://www.guanghuidq.cn是我们本次要访问的服务,响应结果是访问者的IP。

    我在家里使用电脑访问这个服务的时候结果如下:  上图没有使用代理,所以返回的是我家的ip。如果我使用代理访问,返回结果应该是proxy代理服务器的ip地址。

    三、代理使用者RestTemplate

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

    @SpringBootTest
    class ProxyTests {
    
       [@Resource](https://www.yunzeyle.cn my.oschina.net/u/929718)
       private RestTemplate restTemplate;
    
       [@Test](https://my.oschina.net/azibug)
       void testProxyIp(www.qiaoheibpt.com) www.jujinyule.com{
    
          String url = "http://www.yixingylzc.cn
    
          SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
          requestFactory.setProxy(
             new Proxy(
                Proxy.Type.HTTP,
                new InetSocketAddress(www.hongtuupt.cn"88.99.10.251", 1080)  //设置代理服务
             www.yachengyl.cn)
          );
          restTemplate.setRequestFactory(requestFactory);
          //发送请求
          String result = restTemplate.getForObject(url, String.class);
          System.out.println(result);  //打印响应结果
       }
    
    }
    

    代理类型可以是HTTP也可以是SOCKS。下图是 的请求响应结果,返回的是代理服务器的ip,而不是我家里的ip。说明我们为RestTemplate 设置的代理生效了。

  • 相关阅读:
    swoole创建进程
    php中,posix_getpid() 和 getmypid() 有什么不同
    php查看进程
    初探PHP多进程
    nginx转发
    mime类型
    acwing 517. 信息传递
    LeetCode 1255 得分最高的单词集合 Maximum Score Words Formed by Letters
    LEETCODE 1254 统计封闭岛屿的数目 Number of Closed Islands
    算法问题实战策略 SORTGAME
  • 原文地址:https://www.cnblogs.com/woshixiaowang/p/13521287.html
Copyright © 2011-2022 走看看