首頁 > 軟體

RestTemplate使用Proxy代理作為跳板傳送請求

2022-03-17 16:00:40

前言

本文是精講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代理傳送請求的資料請關注it145.com其它相關文章!

以上就是RestTemplate使用Proxy代理作為跳板傳送請求的詳細內容,更多關於RestTemplate使用Proxy代理傳送請求的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com