(四)HttpClient 使用代理 IP
第一節(jié): HttpClient 使用代理 IP
在爬取網(wǎng)頁(yè)的時(shí)候,有的目標(biāo)站點(diǎn)有反爬蟲(chóng)機(jī)制,對(duì)于頻繁訪問(wèn)站點(diǎn)以及規(guī)則性訪問(wèn)站點(diǎn)的行為,會(huì)采集屏蔽IP措施。
這時(shí)候,代理IP就派上用場(chǎng)了。
關(guān)于代理IP的話 也分幾種透明代理、匿名代理、混淆代理、高匿代理
1、透明代理(Transparent Proxy)
REMOTE_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWARDED_FOR = Your IP
透明代理雖然可以直接“隱藏”你的IP地址,但是還是可以從HTTP_X_FORWARDED_FOR來(lái)查到你是誰(shuí)。
2、匿名代理(Anonymous Proxy)
REMOTE_ADDR = proxy IP
HTTP_VIA = proxy IP
HTTP_X_FORWARDED_FOR = proxy IP
匿名代理比透明代理進(jìn)步了一點(diǎn):別人只能知道你用了代理,無(wú)法知道你是誰(shuí)。
還有一種比純匿名代理更先進(jìn)一點(diǎn)的:混淆代理,見(jiàn)下節(jié)。
3、混淆代理(Distorting Proxies)
REMOTE_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWARDED_FOR = Random IP address
如上,與匿名代理相同,如果使用了混淆代理,別人還是能知道你在用代理,但是會(huì)得到一個(gè)假的IP地址,偽裝的更逼真:-)
4、高匿代理(Elite proxy或High Anonymity Proxy)
REMOTE_ADDR = Proxy IP
HTTP_VIA = not determined
HTTP_X_FORWARDED_FOR = not determined
可以看出來(lái),高匿代理讓別人根本無(wú)法發(fā)現(xiàn)你是在用代理,所以是最好的選擇。
一般我們搞爬蟲(chóng) 用的都是 高匿的代理IP;
那代理IP 從哪里搞呢 很簡(jiǎn)單 百度一下,你就知道 一大堆代理IP站點(diǎn)。 一般都會(huì)給出一些免費(fèi)的,但是花點(diǎn)錢(qián)搞收費(fèi)接口更加方便;
比如http://www.66ip.cn/
httpClient使用代理IP代碼:
1 package com.javaxk.httpclient.chap04;
2
3 import org.apache.http.HttpEntity;
4 import org.apache.http.HttpHost;
5 import org.apache.http.client.config.RequestConfig;
6 import org.apache.http.client.methods.CloseableHttpResponse;
7 import org.apache.http.client.methods.HttpGet;
8 import org.apache.http.impl.client.CloseableHttpClient;
9 import org.apache.http.impl.client.HttpClients;
10 import org.apache.http.util.EntityUtils;
11
12 public class Demo1 {
13
14 public static void main(String[] args)throws Exception {
15 CloseableHttpClient httpClient=HttpClients.createDefault(); // 創(chuàng)建httpClient實(shí)例
16 HttpGet httpGet=new HttpGet("https://www.taobao.com/"); // 創(chuàng)建httpget實(shí)例
17 HttpHost proxy=new HttpHost("178.32.213.128", 80);
18 RequestConfig requestConfig=RequestConfig.custom().setProxy(proxy).build(); //代理ip
19 httpGet.setConfig(requestConfig); //設(shè)置代理ip
20 httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0");
21 CloseableHttpResponse response=httpClient.execute(httpGet); // 執(zhí)行http get請(qǐng)求
22 HttpEntity entity=response.getEntity(); // 獲取返回實(shí)體
23 System.out.println("網(wǎng)頁(yè)內(nèi)容:"+EntityUtils.toString(entity, "utf-8")); // 獲取網(wǎng)頁(yè)內(nèi)容
24 response.close(); // response關(guān)閉
25 httpClient.close(); // httpClient關(guān)閉
26 }
27
28 }
建議大家用國(guó)內(nèi)代理IP 以及主干道網(wǎng)絡(luò)大城市的代理IP 訪問(wèn)速度快;
總結(jié)
以上是生活随笔為你收集整理的(四)HttpClient 使用代理 IP的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SAP Hybris的build cal
- 下一篇: 霓虹深渊道具黄金团有什么用