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

时间:2022-09-04 10:10:37

最早知道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实例

Java代码  HttpClient4入门应用----抓取网站内容(解决中文乱码)
  1. HttpClient httpClient = new DefaultHttpClient();  
  2. try {  
  3.       
  4.     //创建HttpGet  
  5.     HttpGet httpGet = new HttpGet("http://www.ifeng.com");  
  6.     System.err.println("executing request " + httpGet.getURI());  
  7.     //执行get请求  
  8.     HttpResponse response = httpClient.execute(httpGet);  
  9.     //获取响应实体  
  10.     HttpEntity entity = response.getEntity();  
  11.     System.err  
  12.             .println("======================================================");  
  13.     //打印响应状态  
  14.     System.out.println(response.getStatusLine());  
  15.     if (entity != null) {  
  16.         //打印响应内容的长度  
  17.   
  18.         System.out.println("Response content lenght:"  
  19.                 + entity.getContentLength());  
  20.         String content = EntityUtils.toString(entity);  
  21.           
  22.         //解决HttpClient获取中文乱码 ,用String对象进行转码  
  23.         System.out.println("Response content:"  
  24.                 + new String(content.getBytes("ISO-8859-1"),"UTF-8"));  
  25.     }  
  26.     System.err  
  27.             .println("==========================================================");  
  28. catch (Exception e) {  
  29.     // TODO: handle exception  
  30. }finally{  
  31.     //关闭连接,释放资源  
  32.     httpClient.getConnectionManager().shutdown();  
  33. }  
 

 

输出内容

 

 

Java代码  HttpClient4入门应用----抓取网站内容(解决中文乱码)
  1. executing request http://www.baidu.com/  
  2. ----------------------------------------  
  3. HTTP/1.1 200 OK  
  4. Response content length: 6759  
  5. Response content: <!doctype html><html><head><meta http-equiv="Content-Type" content="text/html;charset=gb2312"><title>百度一下,你就知道      </title>…(此处省略打印信息)  
  6. -----------------------------------------