欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HttpClient使用代理IP

程序员文章站 2022-03-07 14:13:06
...
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