HttpClient使用代理IP
程序员文章站
2022-05-29 22:49:58
...
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关闭 } }