HttpClient4入门应用之一----抓取网站内容(解决中文乱码)

最早知道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 可以通过requestresponse获取到.

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包。供大家学习测试。

猜你喜欢

转载自seattle2881.iteye.com/blog/1134148