HttpClient(四)-- 使用代理IP 和 超时设置
1.代理IP的用处:
在爬取网页的时候,有的目标站点有反爬虫机制,对于频繁访问站点以及规则性访问站点的行为,会采集屏蔽IP措施。这时候,就可以使用代理IP,屏蔽一个就换一个IP。
2.代理IP分类:
代理IP的话 也分几种: 透明代理、匿名代理、混淆代理、高匿代理,一般使用高匿代理。
3.使用 RequestConfig.custom().setProxy(proxy).build() 来设置代理IP:
public static void main(String[] args) throws ClientProtocolException, IOException { // 创建httpClient实例 CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建httpGet实例 HttpGet httpGet = new HttpGet("http://www.tuicool.com"); // 设置代理IP,设置连接超时时间 、 设置 请求读取数据的超时时间 、 设置从connect Manager获取Connection超时时间、 HttpHost proxy = new HttpHost("122.228.25.97", 8101); RequestConfig requestConfig = RequestConfig.custom() .setProxy(proxy) .setConnectTimeout(10000) .setSocketTimeout(10000) .setConnectionRequestTimeout(3000) .build(); httpGet.setConfig(requestConfig); // 设置请求头消息 httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"); CloseableHttpResponse response = httpClient.execute(httpGet); if(response != null){ HttpEntity entity = response.getEntity(); // 获取返回实体 if(entity != null){ System.out.println("网页内容为:" + EntityUtils.toString(entity, "utf-8")); } } if(response != null){ response.close(); } if(httpClient != null){ httpClient.close(); } }
4.实际开发中 我们是怎样获取到代理IP的呢?
我们可以使用HttpClient来 爬取 http://www.xicidaili.com/ 上最新的20条的高匿代理IP,来保存到 链表中,当一个IP被屏蔽之后获取连接超时时,就接着取出 链表中的一个IP,以此类推,可以判断当链表中的数量小于5的时候,就重新爬取 代理IP 来保存到链表中。
5、HttpClient学习地址