java HttpClient使用代理IP

一、背景

在訪問一個網站時,有時我們不想讓對方獲取到我們的真實IP,這種情況下,就可以使用代理IP進行訪問。

二、代理IP介紹

  1. 透明代理:可以直接“隱藏”你的IP地址,但還是可以查到你是誰。
  2. 匿名代理:比透明代理進步了一點:別人只能知道你用了代理,無法知道你是誰。
  3. 混淆代理:別人還是能知道你在用代理,但是會得到一個假的IP地址,僞裝的更逼真。
  4. 高匿代理:讓別人根本無法發現你是在用代理。一般推薦使用高匿代理。

三、使用代理IP實例

  1. 導入所需jar包,見http-jar.zip。
    鏈接:https://pan.baidu.com/s/1omyA8t49kpngSpFBaMmwDA     提取碼:4be4

  2. 代碼:

import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpProxy {
	public static void main(String[] args) throws Exception {
		// 創建HttpClient實例
		CloseableHttpClient httpClient = HttpClients.createDefault(); 
		
		//創建Httpget實例 ,http://2018.ip138.com/ic.asp爲該網址返回對應的ip
		//以下爲要訪問的網址
		HttpGet httpGet = new HttpGet("http://budwuv.v.vote8.cn"); 
		
		//代理IP設置,代理 ip查詢地址:https://www.xicidaili.com/
		HttpHost httoHost = new HttpHost("112.87.68.95",9999);
		
		RequestConfig requestConfig = RequestConfig.custom()
				.setConnectTimeout(10000)//設置連接超時時間,單位毫秒
				.setSocketTimeout(10000)//設置讀取超時時間,單位毫秒
				.setProxy(httoHost)//設置代理
				.build();
		
		httpGet.setConfig(requestConfig);
		//設置Http報文頭信息
		httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0");
		     
		CloseableHttpResponse response = httpClient.execute(httpGet); // 執行http get請求
	
		 if (response != null){
	            HttpEntity entity = response.getEntity();  //獲取返回實體
	            if (entity != null){
	            	System.out.println("網頁內容爲:");
	                System.out.println(EntityUtils.toString(entity,"gbk"));
	            }
	        }
	        if (response != null){
	            response.close();
	        }
	        if (httpClient != null){
	            httpClient.close();
	        }
	}
}

四、代理IP獲取方式
訪問 http://www.xicidaili.com/,可在該網站上 爬取最新的高匿代理IP,保存到本地;當一個IP被屏蔽或獲取連接超時時,取出下一個IP,當本地IP數不足時再重新爬取,以此類推。

五、驗證舉例

  1. 以網上在線投票系統爲例,在PC端訪問“投票吧”創建投票活動,設置爲“相同IP不允許不能在30分鐘內重複投票”,發佈投票活動http://budwuv.v.vote8.cn。

  2. 正常訪問投票網站,核心代碼如下:

		    HttpGet httpGet = new HttpGet("http://budwuv.v.vote8.cn"); 
		
		RequestConfig requestConfig = RequestConfig.custom()
				.setConnectTimeout(10000)//設置連接超時時間,單位毫秒
				.setSocketTimeout(10000)//設置讀取超時時間,單位毫秒
				.build();
		
		httpGet.setConfig(requestConfig);
		//設置Http報文頭信息
	httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0");
		    CloseableHttpResponse response = httpClient.execute(httpGet); // 執行http get請求

頁面截圖如下:
在這裏插入圖片描述

  1. 投票成功後再訪問該網站,發現提示相同IP在30分鐘之內不能重複投票,截圖如下: 在這裏插入圖片描述

  2. 用設置代理的方式重新訪問該網站,核心代碼如下:

		HttpGet httpGet = new HttpGet("http://budwuv.v.vote8.cn"); 
		
		//代理IP設置
		HttpHost httoHost = new HttpHost("112.87.68.95",9999);
		
		RequestConfig requestConfig = RequestConfig.custom()
				.setConnectTimeout(10000)//設置連接超時時間,單位毫秒
				.setSocketTimeout(10000)//設置讀取超時時間,單位毫秒
				.setProxy(httoHost)//設置代理
				.build();
		
		httpGet.setConfig(requestConfig);
		//設置Http報文頭信息
	httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0");
		     
		    CloseableHttpResponse response = httpClient.execute(httpGet); // 執行http get請求

該頁面可以正常投票,截圖如下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章