RestTemplate使用Proxy代理作为跳板发送请求

 更新时间:2022年03月17日 12:04:20   作者:字母哥哥  
这篇文章主要为大家介绍了RestTemplate使用代理proxy作为跳板发送请求的方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

前言

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

RestTemplate在Spring或非Spring环境下使用精讲

RestTemplate实现多种底层HTTP客户端类库的切换用法

RestTemplate发送HTTP GET请求使用方法详解

RestTemplate发送HTTP POST请求使用方法详解

RestTemplate的DELETE及PUT等请求方法使用精讲

RestTemplate文件上传下载与大文件流式下载

RestTemplate自定义请求失败异常处理示例解析

RestTemplate请求失败自动重启机制精讲

RestTemplate如何通过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端口。

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

二、用于测试的服务端

我们这次要访问的服务端是: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 设置的代理生效了。

以上就是RestTemplate使用Proxy代理作为跳板发送请求的详细内容,更多关于RestTemplate使用Proxy代理发送请求的资料请关注脚本之家其它相关文章!

以上就是RestTemplate使用Proxy代理作为跳板发送请求的详细内容,更多关于RestTemplate使用Proxy代理发送请求的资料请关注脚本之家其它相关文章!

相关文章

  • SpringBoot整合Mybatis使用Druid数据库连接池

    SpringBoot整合Mybatis使用Druid数据库连接池

    这篇文章主要介绍了SpringBoot整合Mybatis使用Druid数据库连接池,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • java中注解的原理解析

    java中注解的原理解析

    这篇文章主要介绍了java中注解的原理解析,java 注解又称 Java 标注,是 JDK5.0 引入的一种注释机制,可以理解为为某个东西,打个标记的记号,等要使用这个注解时,可以通过反射获取标注里面的内容,需要的朋友可以参考下
    2023-10-10
  • JAVA GUI基础与MouseListener用法

    JAVA GUI基础与MouseListener用法

    这篇文章主要介绍了JAVA GUI基础与MouseListener用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • java配置context.xml文件的方法图解

    java配置context.xml文件的方法图解

    这篇文章主要介绍了java配置context.xml文件的方法图解,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • SpringBoot中使用Zookeeper实现分布式锁的案例

    SpringBoot中使用Zookeeper实现分布式锁的案例

    本文主要介绍了SpringBoot中使用Zookeeper实现分布式锁的案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • MyBatis-Plus中通用枚举的实现

    MyBatis-Plus中通用枚举的实现

    表中的有些字段值是固定的此时我们可以使用MyBatis-Plus的通用枚举来实现,本文主要介绍了MyBatis-Plus中通用枚举的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • Java如何从json字符串中获取某个值详解

    Java如何从json字符串中获取某个值详解

    Java开发当中经常需要Json格式的数据,下面这篇文章主要给大家介绍了关于Java如何从json字符串中获取某个值的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • Java8 Lamda方法引用和构造引用原理

    Java8 Lamda方法引用和构造引用原理

    这篇文章主要介绍了Java8 Lamda方法引用和构造引用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 浅谈Spring Data Redis读不到设进去的值

    浅谈Spring Data Redis读不到设进去的值

    本文主要介绍了Spring Data Redis怎么读不到我刚才设进去的值,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 解决java 查看JDK中底层源码的实现方法

    解决java 查看JDK中底层源码的实现方法

    本篇文章是对在java中查看JDK中底层源码的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05

最新评论