今天要讲解的HttpClient正是常用的网络存储工具之一。记得最早接触HttpClient是在两年前,当时要做一个垂直搜索引擎,数据自然是来源于互联网,通过一个爬虫系统不断从指定网站上爬取感兴趣的数据,然后通过Lucene搜索引擎框架实现海量数据的快速检索。而爬虫系统最开始是想采用开源的爬虫框架Heritrix来实现,但接触一段时间后发现Heritrix过于庞大,而且是作为一个独立的系统运行,不方便嵌入到现有的系统中,再加上学习成本高,最后还是选择了“HttpClient + HtmlParser”来实现的小型爬虫系统;其中HttpClient可以模拟HTTP的POST和GET请求,用于从指定网站获取网页数据,而HtmlParser用于解析爬取到的页面,过滤HTML标记,取得最终数据。
是不是发现HttpClient还挺强大的?让我们看看它是什么来头。"HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议"。如果你以前没有接触过HttpClient,那么你只需要简单记住两点就可以了:1)HttpClient是一个HTTP协议开发包;2)HttpClient不是Android的专利。
HttpClient的功能介绍:
1)实现了HTTP请求的所有方法(如GET、POST、PUT、HEAD 等);
2)支持自动转向;
3)支持 HTTPS 协议;
4)支持代理服务器等
HttpClient的基本使用(以POST请求为例):
1)创建HttpClient实例(类似于浏览器客户端);
HttpClient client = new DefaultHttpClient();
2)创建HttpPost请求,需要向HttpPost的构造方法传入所请求的URL;
HttpPost post = new HttpPost(requestUrl);
3)发出POST请求(调用HttpClient的execute()方法,execute()的参数为HttpPost实例);
HttpResponse response = client.execute(post);
4)读取返回结果;
5)释放连接;
6)对返回的结果进行处理。
在Android平台上使用HttpClient,并不需要添加额外的jar包,因为Android平台吸收了许多优秀的开源框架,其中就包括HttpClient。(注意我写的是吸收,不是收购,两码事),下面就来看一个Android平台使用HttpClient的例子。
1)首先来看布局文件res/layout/main.xml
备注:是不是发现HttpClient很容易使用呢?其实,上面所讲解的只是HttpClient最基本的功能(发起POST请求);我们在浏览器客户端所执行的大多数操作HttpClient都能够模拟,例如:提交表单、查询数据、上传下载文档、页面跳转、Session存储等。比如大家经常玩“抢车位”、“偷菜”,就可以通过HttpClient编程自动实现。(其实这就相当于外挂的原型了,尝试一下可以,小心被封号!)