精講RestTemplate第10篇-使用代理做爲跳板發送請求

本文是精講RestTemplate第10篇,前篇的blog訪問地址以下:html

本節咱們要爲你們介紹一下,如何在使用RestTemplate發送請求的時候使用代理Proxy。至於爲何要使用代理,給你們舉一個簡單的例子:一些作過爬蟲的同窗可能都知道,當爬蟲高頻的屢次訪問一個網站數據,可能致使請求客戶端Ip被封鎖的可能。不少狀況下,作爬蟲的企業就維護一個代理IP池,每發送一次請求,就更換一次IP。
代理Proxy做爲跳板成爲服務的直接訪問者,代理使用者(真正的客戶端)是間接訪問服務。這樣在服務端看來,每次請求是代理髮出的,從代理IP池中一直更換代理髮送請求,這樣可以下降IP封鎖的可能。vue

咱們本節就來爲你們介紹,做爲一個代理使用者,該如何使用RestTemplate發送請求的時候使用代理Proxy。java

1、搭建一個代理服務器

筆者只從知識的層面去講解使用方法,因此不作蠅營狗苟的勾當。代理服務器仍是由我本身來搭建用來測試,在個人一個CentOS服務器上安裝tinyproxy,tinyproxy能夠提供代理服務。spring

# 安裝tinyproxy 命令
sudo yum install tinyproxy -y

編輯tinyproxy的配置文件vim /etc/tinyproxy/tinyproxy.conf。爲該代理配置容許訪問的使用者客戶端ip,也就是我家的ip,因此這個代理服務只能我用,其餘人用不了。vim

# 代理服務端口
Port 1080
# 容許哪一個客戶端使用該代理程序?
Allow xxx.xxx.xxx.xxx

啓動tinyproxy提供代理服務,最好檢查一下防火牆是否開放了1080端口。後端

systemctl start tinyproxy.service

2、用於測試的服務端

  • 咱們此次要訪問的服務端是:http://www.httpbin.org, 這個網站是提供在線的HTTP訪問服務的網站。咱們能夠用它進行測試。
  • http://www.httpbin.org/ip是咱們本次要訪問的服務,響應結果是訪問者的IP。

我在家裏使用電腦訪問這個服務的時候結果以下:

上圖沒有使用代理,因此返回的是我家的ip。若是我使用代理訪問,返回結果應該是proxy代理服務器的ip地址。springboot

3、代理使用者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 設置的代理生效了。前後端分離

歡迎關注個人博客,裏面有不少精品合集

  • 本文轉載註明出處(必須帶鏈接,不能只轉文字):字母哥博客

以爲對您有幫助的話,幫我點贊、分享!您的支持是我不竭的創做動力! 。另外,筆者最近一段時間輸出了以下的精品內容,期待您的關注。微服務

相關文章
相關標籤/搜索