在如今的互联网时代,代理服务器已屡见不鲜,遍地可寻,其对互联网用户的重要性自然不言而喻。同样的,代理服务器对于爬虫来说一样重要,不仅可以通过代理进入某些比较封闭的局域网内抓取数据,更可以通过切换代理服务器来达到隐藏自身避免被封杀的目的。如果您打算或正在基于HttpClient4.x开发网络爬虫,且需要通过代理服务器来进行网页抓取,那么本文或许能够帮助您快速将HttpClient4.x的使用代理功能加入到您的爬虫中。
如下代码演示了如何使用HttpClient通过代理服务器发送请求
package cn.ysh.studio.crawler.httpclient;import org.apache.http.Header;import org.apache.http.HttpEntity;import org.apache.http.HttpHost;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.conn.params.ConnRoutePNames;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;/** * 演示如何使用HttpClient通过代理服务器发送请求 * @since 4.0 * @author Shenghany * @date 2013-5-19 */publicclassClientExecuteProxy{publicstaticvoid main(String[] args)throwsException{//创建代理服务器HttpHost proxy =newHttpHost("127.0.0.1",8080,"http");DefaultHttpClient httpclient =newDefaultHttpClient();try{//设置代理服务器 httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);//目标服务器HttpHost target =newHttpHost("issues.apache.org",443,"https");//Get请求HttpGet req =newHttpGet("/");System.out.println("executing request to "+ target +" via "+ proxy);//执行请求HttpResponse rsp = httpclient.execute(target, req);//获得响应实体HttpEntity entity = rsp.getEntity();System.out.println("----------------------------------------");System.out.println(rsp.getStatusLine());//获得响应标头Header[] headers = rsp.getAllHeaders();for(int i =0; i<headers.length; i++){System.out.println(headers[i]);}System.out.println("----------------------------------------");//打印响应实体if(entity !=null){System.out.println(EntityUtils.toString(entity));}}finally{// 当不再需要HttpClient实例时,关闭连接管理器以确保释放所有占用的系统资源 httpclient.getConnectionManager().shutdown();}}}