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

本节我们要为大家介绍一下,如何在使用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 设置的代理生效了。

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

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

觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。

精讲RestTemplate第10篇-使用代理作为跳板发送请求的更多相关文章

  1. 精讲RestTemplate第8篇-请求失败自动重试机制

    本文是精讲RestTemplate第8篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  2. 精讲RestTemplate第2篇-多种底层HTTP客户端类库的切换

    本文是精讲RestTemplate第2篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 RestTemplate只是对其他的HTTP客 ...

  3. 精讲RestTemplate第3篇-GET请求使用方法详解

    本文是精讲RestTemplate第3篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  4. 精讲RestTemplate第4篇-POST请求方法使用详解

    本文是精讲RestTemplate第4篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  5. 精讲RestTemplate第4篇-DELETE、PUT等请求方法使用详解

    本文是精讲RestTemplate第5篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  6. 精讲RestTemplate第6篇-文件上传下载与大文件流式下载

    本文是精讲RestTemplate第6篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  7. 精讲RestTemplate第7篇-自定义请求失败异常处理

    本文是精讲RestTemplate第7篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  8. 精讲RestTemplate第9篇-如何通过HTTP Basic Auth认证

    本文是精讲RestTemplate第9篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  9. 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用

    一.什么是 RestTemplate? RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpCo ...

随机推荐

  1. 微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示

    一.前言 项目中遇到的评分相关的需求其实还挺多.之前也写过网页中关于评分功能实现的文档.这次,是基于微信小程序开发而提炼出一个简单方便使用的方法,网页开发中同样可用.这次使用的还是字体,主要是字体这个 ...

  2. DJANGO-天天生鲜项目从0到1-008-列表页

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  3. 06 . ELK Stack + kafka集群

    简介 Filebeat用于收集本地文件的日志数据. 它作为服务器上的代理安装,Filebeat监视日志目录或特定的日志文件,尾部文件,并将它们转发到Elasticsearch或Logstash进行索引 ...

  4. webpack 4.x版本手动配置

    运行 npm init -y 快速初始化项目 在项目根目录创建src源代码目录和dist产品目录 在src目录下创建 index.html mani.js文件如果后期使用entry打包,这里可以手动创 ...

  5. 容器centos7安装部署ansible

    容器centos7安装部署ansible centos镜像版本及ansible版本 centos:centos7.5.1804 ansible:2.9.11 启动容器并进入容器 docker run ...

  6. 学习MySQL这一篇就够了

    MySQL 第一章 数据库概述 1.1.数据库的好处 将数据持久化到本地 提供结构化查询功能 1.2.数据库的常见概念 DB:数据库,存储数据的仓库 DBS:数据库管理系统,又称为数据库软件或者数据库 ...

  7. 4.3 省选模拟赛 序列游戏 dp

    可以发现 某一段被删除后状态难以表示 也难以链接起来. 考虑暴力 有40分的状压dp 暴力存状态 然后枚举转移即可.最后注意和f[0]这个状态取max 不然一分都没有. const int MAXN= ...

  8. python与pycharm的爱恨情仇

    首先大家应该区别 这两者是什么? python 是一门语言 pycharm 是工具 还得交待的是  可以编译python的工具 不止这一款 比如说--eclipse idea ... eclipse中 ...

  9. Python基础教程(第2版)简介及PDF下载地址!

    内容简介 · · · · · · 本书是经典教程的全新改版,作者根据Python 3.0版本的种种变化,全面改写了书中内容,做到既能“瞻前”也能“顾后”.本书层次鲜明.结构严谨.内容翔实,特别是在最后 ...

  10. Python使用Tornado+Redis维护ADSL拨号服务器代理池

    们尝试维护过一个免费的代理池,但是代理池效果用过就知道了,毕竟里面有大量免费代理,虽然这些代理是可用的,但是既然我们能刷到这个免费代理,别人也能呀,所以就导致这个代理同时被很多人使用来抓取网站,所以当 ...