HttpClient使用代理IP

阅读更多
1. HttpClient使用代理IP

在爬取网页的时候,有的目标站点有反爬虫机制,对于频繁访问站点以及规则性访问站点的行为,会采集屏蔽IP措施。这时候,代理IP就派上用场了。
关于代理IP的话也分几种透明代理、匿名代理、混淆代理、高匿代理

1) 透明代理(TransparentProxy)
REMOTE_ADDR=ProxyIP
HTTP_VIA=ProxyIP
HTTP_X_FORWARDED_FOR=YourIP
透明代理虽然可以直接“隐藏”你的IP地址,但是还是可以从HTTP_X_FORWARDED_FOR来查到你是谁。

2) 匿名代理(AnonymousProxy)
REMOTE_ADDR=proxyIP
HTTP_VIA=proxyIP
HTTP_X_FORWARDED_FOR=proxyIP
匿名代理比透明代理进步了一点:别人只能知道你用了代理,无法知道你是谁。
还有一种比纯匿名代理更先进一点的:混淆代理。

3) 混淆代理(DistortingProxies)
REMOTE_ADDR=ProxyIP
HTTP_VIA=ProxyIP
HTTP_X_FORWARDED_FOR=RandomIPaddress
如上,与匿名代理相同,如果使用了混淆代理,别人还是能知道你在用代理,但是会得到一个假的IP地址,伪装的更逼真。

4) 高匿代理(Eliteproxy或HighAnonymityProxy)
REMOTE_ADDR=ProxyIP
HTTP_VIA=notdetermined
HTTP_X_FORWARDED_FOR=notdetermined
可以看出来,高匿代理让别人根本无法发现你是在用代理,所以是最好的选择。
一般我们搞爬虫用的都是高匿的代理IP;建议大家用国内代理IP以及主干道网络大城市的代理IP访问速度快;
那代理IP从哪里搞呢很简单百度一下,你就知道一大堆代理IP站点。一般都会给出一些免费的,但是花点钱搞收费接口更加方便;
比如: http://www.66ip.cn/


Demo01.java

package com.andrew.httpClient.chap04;

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 Demo01 {
    public static void main(String[] args) throws Exception {
        CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建httpClient实例
        HttpGet httpGet = new HttpGet("http://www.tuicool.com/"); // 创建httpget实例
        HttpHost proxy = new HttpHost("221.239.86.26", 32228);
        RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
        httpGet.setConfig(config);
        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请求
        HttpEntity entity = response.getEntity(); // 获取返回实体
        System.out.println("网页内容:" + EntityUtils.toString(entity, "utf-8")); // 获取网页内容
        response.close(); // response关闭
        httpClient.close(); // httpClient关闭
    }
}

你可能感兴趣的:(HttpClient)