RestTemplate使用Proxy代理作為跳板發(fā)送請(qǐng)求
前言
本文是精講RestTemplate第10篇,前篇的blog訪問地址如下:
RestTemplate在Spring或非Spring環(huán)境下使用精講
RestTemplate實(shí)現(xiàn)多種底層HTTP客戶端類庫的切換用法
RestTemplate發(fā)送HTTP GET請(qǐng)求使用方法詳解
RestTemplate發(fā)送HTTP POST請(qǐng)求使用方法詳解
RestTemplate的DELETE及PUT等請(qǐng)求方法使用精講
RestTemplate自定義請(qǐng)求失敗異常處理示例解析
RestTemplate請(qǐng)求失敗自動(dòng)重啟機(jī)制精講
RestTemplate如何通過HTTP Basic Auth認(rèn)證示例說明
本節(jié)我們要為大家介紹一下,如何在使用RestTemplate發(fā)送請(qǐng)求的時(shí)候使用代理Proxy。至于為什么要使用代理,給大家舉一個(gè)簡(jiǎn)單的例子:一些做過爬蟲的同學(xué)可能都知道,當(dāng)爬蟲高頻的多次訪問一個(gè)網(wǎng)站數(shù)據(jù),可能導(dǎo)致請(qǐng)求客戶端Ip被封鎖的可能。很多情況下,做爬蟲的企業(yè)就維護(hù)一個(gè)代理IP池,每發(fā)送一次請(qǐng)求,就更換一次IP。 代理Proxy作為跳板成為服務(wù)的直接訪問者,代理使用者(真正的客戶端)是間接訪問服務(wù)。這樣在服務(wù)端看來,每次請(qǐng)求是代理發(fā)出的,從代理IP池中一直更換代理發(fā)送請(qǐng)求,這樣能夠降低IP封鎖的可能。

我們本節(jié)就來為大家介紹,作為一個(gè)代理使用者,該如何使用RestTemplate發(fā)送請(qǐng)求的時(shí)候使用代理Proxy。
一、搭建一個(gè)代理服務(wù)器
筆者只從知識(shí)的層面去講解使用方法,所以不做蠅營(yíng)狗茍的勾當(dāng)。代理服務(wù)器還是由我自己來搭建用來測(cè)試,在我的一個(gè)CentOS服務(wù)器上安裝tinyproxy,tinyproxy可以提供代理服務(wù)。
# 安裝tinyproxy 命令 sudo yum install tinyproxy -y
編輯tinyproxy的配置文件vim /etc/tinyproxy/tinyproxy.conf。為該代理配置允許訪問的使用者客戶端ip,也就是我家的ip,所以這個(gè)代理服務(wù)只能我用,其他人用不了。
# 代理服務(wù)端口 Port 1080 # 允許哪個(gè)客戶端使用該代理程序? Allow xxx.xxx.xxx.xxx
啟動(dòng)tinyproxy提供代理服務(wù),最好檢查一下防火墻是否開放了1080端口。
# 代理服務(wù)端口 Port 1080 # 允許哪個(gè)客戶端使用該代理程序? Allow xxx.xxx.xxx.xxx
二、用于測(cè)試的服務(wù)端
我們這次要訪問的服務(wù)端是:http://www.httpbin.org, 這個(gè)網(wǎng)站是提供在線的HTTP訪問服務(wù)的網(wǎng)站。我們可以用它進(jìn)行測(cè)試。
http://www.httpbin.org/ip是我們本次要訪問的服務(wù),響應(yīng)結(jié)果是訪問者的IP。
我在家里使用電腦訪問這個(gè)服務(wù)的時(shí)候結(jié)果如下:

上圖沒有使用代理,所以返回的是我家的ip。如果我使用代理訪問,返回結(jié)果應(yīng)該是proxy代理服務(wù)器的ip地址。
三、代理使用者RestTemplate
我的第一小節(jié)中的代理服務(wù)器的ip是88.99.10.251,tinyproxy代理服務(wù)端口1080。下文代碼通過SimpleClientHttpRequestFactory設(shè)置訪問代理
@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) //設(shè)置代理服務(wù)
)
);
restTemplate.setRequestFactory(requestFactory);
//發(fā)送請(qǐng)求
String result = restTemplate.getForObject(url, String.class);
System.out.println(result); //打印響應(yīng)結(jié)果
}
}代理類型可以是HTTP也可以是SOCKS。下圖是 "http://www.httpbin.org/ip" 的請(qǐng)求響應(yīng)結(jié)果,返回的是代理服務(wù)器的ip,而不是我家里的ip。說明我們?yōu)镽estTemplate 設(shè)置的代理生效了。

以上就是RestTemplate使用Proxy代理作為跳板發(fā)送請(qǐng)求的詳細(xì)內(nèi)容,更多關(guān)于RestTemplate使用Proxy代理發(fā)送請(qǐng)求的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
以上就是RestTemplate使用Proxy代理作為跳板發(fā)送請(qǐng)求的詳細(xì)內(nèi)容,更多關(guān)于RestTemplate使用Proxy代理發(fā)送請(qǐng)求的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot整合Mybatis使用Druid數(shù)據(jù)庫連接池
這篇文章主要介紹了SpringBoot整合Mybatis使用Druid數(shù)據(jù)庫連接池,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
JAVA?GUI基礎(chǔ)與MouseListener用法
這篇文章主要介紹了JAVA?GUI基礎(chǔ)與MouseListener用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
SpringBoot中使用Zookeeper實(shí)現(xiàn)分布式鎖的案例
本文主要介紹了SpringBoot中使用Zookeeper實(shí)現(xiàn)分布式鎖的案例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
MyBatis-Plus中通用枚舉的實(shí)現(xiàn)
表中的有些字段值是固定的此時(shí)我們可以使用MyBatis-Plus的通用枚舉來實(shí)現(xiàn),本文主要介紹了MyBatis-Plus中通用枚舉的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05
淺談Spring Data Redis讀不到設(shè)進(jìn)去的值
本文主要介紹了Spring Data Redis怎么讀不到我剛才設(shè)進(jìn)去的值,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
解決java 查看JDK中底層源碼的實(shí)現(xiàn)方法
本篇文章是對(duì)在java中查看JDK中底層源碼的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05

