HttpClient4入门应用之一----抓取网站内容(解决中文乱码) HttpClientHttpClient4网页中文乱码
最早知道HttpClient是和以前公司同事聊到一家公司的面试题,说是怎么判断一个网站运行是否正常,当时都不知道从哪方面下手。后来那同事说是用HttpClient,可以抓取到网站的HTMl代码,借此可以判断网站运行情况。在这里,我暂时还不知道是不是通过这个方法可以判断网站运行情况,但是真正让我学习HttpClient,却是进了现在这家公司,需要用它对自己写的Struts2里的Action进行测试。
对我来说,现在的理解就是HttpClient可以通过url模拟Http的请求,获得服务端的响应,并可以将响应的内容打印到控制台。至于官方的解释,以下是百科的。
HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。现在HttpClient最新版本为 HttpClient 4.1.
几个主要类介绍:
1.HttpClient
HttpClient代表了一个http的客户端,HttpClient接口定义了大多数基本的http请求执行行为.
2.HttpEntity
entity是发送或者接收消息的载体。entities 可以通过request和response获取到.
3.HttpConnection
HttpConnection代表了一个http连接。
例子:
通过HttpClient抓取百度主页的内容。
//创建默认的httpClient实例
HttpClient httpClient = new DefaultHttpClient(); try { //创建HttpGet HttpGet httpGet = new HttpGet("http://www.ifeng.com"); System.err.println("executing request " + httpGet.getURI()); //执行get请求 HttpResponse response = httpClient.execute(httpGet); //获取响应实体 HttpEntity entity = response.getEntity(); System.err .println("======================================================"); //打印响应状态 System.out.println(response.getStatusLine()); if (entity != null) { //打印响应内容的长度 System.out.println("Response content lenght:" + entity.getContentLength()); String content = EntityUtils.toString(entity); //解决HttpClient获取中文乱码 ,用String对象进行转码 System.out.println("Response content:" + new String(content.getBytes("ISO-8859-1"),"UTF-8")); } System.err .println("=========================================================="); } catch (Exception e) { // TODO: handle exception }finally{ //关闭连接,释放资源 httpClient.getConnectionManager().shutdown(); }
输出内容
executing request http://www.baidu.com/ ---------------------------------------- HTTP/1.1 200 OK Response content length: 6759 Response content: <!doctype html><html><head><meta http-equiv="Content-Type" content="text/html;charset=gb2312"><title>百度一下,你就知道 </title>…(此处省略打印信息) -----------------------------------------
以下附上HttpClient4.1的完整应用jar包。供大家学习测试。