本文是精講RestTemplate第10篇呵萨,前篇的blog訪問地址如下:
- 精講RestTemplate第1篇-在Spring或非Spring環(huán)境下如何使用
- 精講RestTemplate第2篇-多種底層HTTP客戶端類庫的切換
- 精講RestTemplate第3篇-GET請求使用方法詳解
- 精講RestTemplate第4篇-POST請求方法使用詳解
- 精講RestTemplate第5篇-DELETE、PUT等請求方法使用詳解
- 精講RestTemplate第6篇-文件上傳下載與大文件流式下載
- 精講RestTemplate第7篇-自定義請求失敗異常處理
- 精講RestTemplate第8篇-請求失敗自動重試機制
- 精講RestTemplate第9篇-如何通過HTTP Basic Auth認證
本節(jié)我們要為大家介紹一下椒袍,如何在使用RestTemplate發(fā)送請求的時候使用代理Proxy湃交。至于為什么要使用代理醒第,給大家舉一個簡單的例子:一些做過爬蟲的同學(xué)可能都知道缸榄,當爬蟲高頻的多次訪問一個網(wǎng)站數(shù)據(jù)捞附,可能導(dǎo)致請求客戶端Ip被封鎖的可能。很多情況下胳嘲,做爬蟲的企業(yè)就維護一個代理IP池,每發(fā)送一次請求扣草,就更換一次IP了牛。
代理Proxy作為跳板成為服務(wù)的直接訪問者,代理使用者(真正的客戶端)是間接訪問服務(wù)辰妙。這樣在服務(wù)端看來鹰祸,每次請求是代理發(fā)出的,從代理IP池中一直更換代理發(fā)送請求密浑,這樣能夠降低IP封鎖的可能蛙婴。
我們本節(jié)就來為大家介紹,作為一個代理使用者尔破,該如何使用RestTemplate發(fā)送請求的時候使用代理Proxy街图。
一、搭建一個代理服務(wù)器
筆者只從知識的層面去講解使用方法懒构,所以不做蠅營狗茍的勾當餐济。代理服務(wù)器還是由我自己來搭建用來測試,在我的一個CentOS服務(wù)器上安裝tinyproxy胆剧,tinyproxy可以提供代理服務(wù)絮姆。
# 安裝tinyproxy 命令
sudo yum install tinyproxy -y
編輯tinyproxy的配置文件vim /etc/tinyproxy/tinyproxy.conf
。為該代理配置允許訪問的使用者客戶端ip秩霍,也就是我家的ip篙悯,所以這個代理服務(wù)只能我用,其他人用不了铃绒。
# 代理服務(wù)端口
Port 1080
# 允許哪個客戶端使用該代理程序鸽照?
Allow xxx.xxx.xxx.xxx
啟動tinyproxy提供代理服務(wù),最好檢查一下防火墻是否開放了1080端口匿垄。
systemctl start tinyproxy.service
二移宅、用于測試的服務(wù)端
- 我們這次要訪問的服務(wù)端是:
http://www.httpbin.org
, 這個網(wǎng)站是提供在線的HTTP訪問服務(wù)的網(wǎng)站归粉。我們可以用它進行測試。 -
http://www.httpbin.org/ip
是我們本次要訪問的服務(wù)漏峰,響應(yīng)結(jié)果是訪問者的IP糠悼。
我在家里使用電腦訪問這個服務(wù)的時候結(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ā)送請求
String result = restTemplate.getForObject(url, String.class);
System.out.println(result); //打印響應(yīng)結(jié)果
}
}
代理類型可以是HTTP也可以是SOCKS贤壁。下圖是 "http://www.httpbin.org/ip" 的請求響應(yīng)結(jié)果悼枢,返回的是代理服務(wù)器的ip,而不是我家里的ip脾拆。說明我們?yōu)镽estTemplate 設(shè)置的代理生效了馒索。
歡迎關(guān)注我的博客,里面有很多精品合集
- 本文轉(zhuǎn)載注明出處(必須帶連接名船,不能只轉(zhuǎn)文字):字母哥博客绰上。
覺得對您有幫助的話,幫我點贊渠驼、分享蜈块!您的支持是我不竭的創(chuàng)作動力! 迷扇。另外百揭,筆者最近一段時間輸出了如下的精品內(nèi)容,期待您的關(guān)注谋梭。