前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >精讲RestTemplate第10篇-使用代理作为跳板发送请求

精讲RestTemplate第10篇-使用代理作为跳板发送请求

作者头像
字母哥博客
发布于 2020-09-23 07:22:47
发布于 2020-09-23 07:22:47
2.5K00
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

一、搭建一个代理服务器

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 安装tinyproxy 命令
sudo yum install tinyproxy -y

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 代理服务端口
Port 1080
# 允许哪个客户端使用该代理程序?
Allow xxx.xxx.xxx.xxx

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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设置访问代理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@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 设置的代理生效了。

喜欢 (0)or分享 (0)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
spark dataframe操作集锦(提取前几行,合并,入库等)
spark dataframe派生于RDD类,但是提供了非常强大的数据操作功能。当然主要对类SQL的支持。
sparkexpert
2022/05/07
1.4K0
Spark DataFrame写入HBase的常用方式
Spark是目前最流行的分布式计算框架,而HBase则是在HDFS之上的列式分布式存储引擎,基于Spark做离线或者实时计算,数据结果保存在HBase中是目前很流行的做法。例如用户画像、单品画像、推荐系统等都可以用HBase作为存储媒介,供客户端使用。 因此Spark如何向HBase中写数据就成为很重要的一个环节了。本文将会介绍三种写入的方式,其中一种还在期待中,暂且官网即可... 代码在spark 2.2.0版本亲测 1. 基于HBase API批量写入 第一种是最简单的使用方式了,就是基于RDD的分区
用户1154259
2018/03/28
4.3K0
Spark DataFrame写入HBase的常用方式
DataFrame常用操作
在spark-shell状态下查看sql内置函数: spark.sql("show functions").show(1000) 比如:SUBSTR(columnName,0,1)='B' show,take,first,head df.show(30,false)df.take(10) df.first() df.head(3) 选择某列显示 df.select("column").show(30,false) 按条件过滤 df.filter("name='' OR name='NULL'").
sparkle123
2018/04/28
7610
spark读写HBase之使用hortonworks的开源框架shc(二):入门案例
shc测试环境的搭建参考: spark读写HBase之使用hortonworks的开源框架shc(一):源码编译以及测试工程创建
CoderJed
2018/09/13
1.5K0
spark读写HBase之使用hortonworks的开源框架shc(二):入门案例
学会这 29 个 函数,你就是 Pandas 专家
Pandas 无疑是 Python 处理表格数据最好的库之一,但是很多新手无从下手,这里总结出最常用的 29 个函数,先点赞收藏,留下印象,后面使用的时候打开此文 CTRL + F 搜索函数名称,检索其用法即可。
somenzz
2023/01/03
3.9K0
DataFrame常用API操作
以列的(列名,列的类型。列值)的形式构成的分布式数据集,按照列赋予不同名称,约等于关系数据库的数据表
羊羽shine
2019/08/27
1.2K0
总结了67个pandas函数,完美解决数据处理,拿来即用!
不管是业务数据分析 ,还是数据建模。数据处理都是及其重要的一个步骤,它对于最终的结果来说,至关重要。
小F
2021/04/26
3.6K0
总结了67个pandas函数,完美解决数据处理,拿来即用!
pandas入门:Series、DataFrame、Index基本操作都有了!
导读:pandas是一款开放源码的BSD许可的Python库。它基于NumPy创建,为Python编程语言提供了高性能的、易于使用的数据结构和数据分析工具。
CDA数据分析师
2020/09/22
4.6K0
pandas入门:Series、DataFrame、Index基本操作都有了!
Spark SQL 快速入门系列(4) | RDD、DataFrame、DataSet三者的共性和区别
  在 SparkSQL 中 Spark 为我们提供了两个新的抽象,分别是DataFrame和DataSet。他们和RDD有什么区别呢?首先从版本的产生上来看:
不温卜火
2020/10/28
1.4K0
Spark SQL 快速入门系列(4) | RDD、DataFrame、DataSet三者的共性和区别
详解DataFrame高性能处理工具-Polars
Polars是一个用于操作结构化数据的高性能DataFrame库。其核心部分是用Rust编写的,但该库也提供了Python接口。它的主要特点包括:
小F
2023/12/30
5150
详解DataFrame高性能处理工具-Polars
SparkSql之DataFrame
为了方便测试,单独把sparkSession 提出去,使用它 Junit的方式进行测试运行。
用户1483438
2022/07/26
7280
Python从零开始第三章数据处理与分析python中的dplyr(4)目录
可以使用separate(column,into,sep =“[\ W _] +”,remove = True,convert = False,extra ='drop',fill ='right')函数将列拆分为多个列。 separate()有各种各样的参数:
用户1359560
2019/01/03
1.1K0
妈妈再也不用担心我忘记pandas操作了
pandas的操作上千种,但对于数据分析的使用掌握常用的操作就可以应付了,更多的操作可以参考pandas官网。
Python数据科学
2018/08/06
2.2K0
妈妈再也不用担心我忘记pandas操作了
Spark DataFrame基本操作
DataFrame的概念来自R/Pandas语言,不过R/Pandas只是runs on One Machine,DataFrame是分布式的,接口简单易用。 Threshold: Spark RDD API VS MapReduce API One Machine:R/Pandas 官网的说明 http://spark.apache.org/docs/2.1.0/sql-programming-guide.html#datasets-and-dataframes 拔粹如下: A Dataset is
sparkle123
2018/04/26
1K0
PySpark入门级学习教程,框架思维(中)
在讲Spark SQL前,先解释下这个模块。这个模块是Spark中用来处理结构化数据的,提供一个叫SparkDataFrame的东西并且自动解析为分布式SQL查询数据。我们之前用过Python的Pandas库,也大致了解了DataFrame,这个其实和它没有太大的区别,只是调用的API可能有些不同罢了。
Sam Gor
2021/04/26
4.4K0
DataFrame与RDD的互操作
DataFrame Interoperating with RDDs 参考官网 http://spark.apache.org/docs/2.2.0/sql-programming-guide.html#interoperating-with-rdds DataFrame和RDD互操作的两种方式比较: 1)反射推导式:case class 前提:事先需要知道字段、字段类型 2)编程式:Row 如果第一种情况不能满足要求(事先不知道列等schema信息) 选型:优先考虑第一种,使用
sparkle123
2018/04/26
8800
DataFrame与RDD的互操作
Spark之【SparkSQL编程】系列(No3)——《RDD、DataFrame、DataSet三者的共性和区别》
本篇作为【SparkSQL编程】系列的第三篇博客,为大家介绍的是RDD、DataFrame、DataSet三者的共性和区别。
大数据梦想家
2021/01/27
1.9K0
Spark之【SparkSQL编程】系列(No3)——《RDD、DataFrame、DataSet三者的共性和区别》
《Pandas 1.x Cookbook · 第二版》第02章 DataFrame基础运算
第01章 Pandas基础 第02章 DataFrame基础运算 ---- 2.1 从DataFrame中选择多列 使用列名列表提取DataFrame的多列: >>> import pandas as pd >>> import numpy as np >>> movies = pd.read_csv("data/movie.csv") >>> movie_actor_director = movies[ ... [ ... "actor_1_name", ...
SeanCheney
2021/02/05
7300
Spark读取结构化数据
Spark可以从本地CSV,HDFS以及Hive读取结构化数据,直接解析为DataFrame,进行后续分析。
用户2183996
2018/06/21
1.9K0
[220]python从SQL型数据库读写dataframe型数据
Python的pandas包对表格化的数据处理能力很强,而SQL数据库的数据就是以表格的形式储存,因此经常将sql数据库里的数据直接读取为dataframe,分析操作以后再将dataframe存到sql数据库中。而pandas中的read_sql和to_sql函数就可以很方便得从sql数据库中读写数据。
周小董
2022/04/12
1.9K0
推荐阅读
相关推荐
spark dataframe操作集锦(提取前几行,合并,入库等)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文