HttpClient 基本类库使用

本文介绍了如何使用HttpClient库中的GetMethod类发起HTTP GET请求。通过示例代码详细解释了配置HttpClient对象、设置请求参数、执行请求、处理响应状态码及内容等步骤。

HttpClient 基本类库使用

HttpClinet 提供了几个类来支持 HTTP 访问。下面我们通过一些示例代码来熟悉和说明这些类的功能和使用。 HttpClient 提供的 HTTP 的访问主要是通过 GetMethod 类和 PostMethod 类来实现的,他们分别对应了 HTTP Get 请求与 Http Post 请求。

GetMethod

使用 GetMethod 来访问一个 URL 对应的网页,需要如下一些步骤。

  1. 生成一个 HttpClinet 对象并设置相应的参数。
  2. 生成一个 GetMethod 对象并设置响应的参数。
  3. 用 HttpClinet 生成的对象来执行 GetMethod 生成的 Get 方法。
  4. 处理响应状态码。
  5. 若响应正常,处理 HTTP 响应内容。
  6. 释放连接。

清单 1 的代码展示了这些步骤,其中的注释对代码进行了较详细的说明。


清单 1.

/* 1 生成 HttpClinet 对象并设置参数*/
  HttpClient httpClient=new HttpClient();
  //设置 Http 连接超时为5秒
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
  
  /*2 生成 GetMethod 对象并设置参数*/
  GetMethod getMethod=new GetMethod(url);	 
  //设置 get 请求超时为 5 秒
getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,5000);
  //设置请求重试处理,用的是默认的重试处理:请求三次
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
          new DefaultHttpMethodRetryHandler());
  
  /*3 执行 HTTP GET 请求*/
  try{ 
	  int statusCode = httpClient.executeMethod(getMethod);
	  /*4 判断访问的状态码*/
      if (statusCode != HttpStatus.SC_OK) 
      {
System.err.println("Method failed: "+ getMethod.getStatusLine());
      }
  
      /*5 处理 HTTP 响应内容*/
      //HTTP响应头部信息,这里简单打印
  Header[] headers=getMethod.getResponseHeaders();
      for(Header  h:  headers)
  	      System.out.println(h.getName()+" "+h.getValue());*/
      //读取 HTTP 响应内容,这里简单打印网页内容
      byte[] responseBody = getMethod.getResponseBody();//读取为字节数组
System.out.println(new String(responseBody));
      //读取为 InputStream,在网页内容数据量大时候推荐使用
      InputStream response = getMethod.getResponseBodyAsStream();//
      …
}
catch (HttpException e) 
{
	  // 发生致命的异常,可能是协议不对或者返回的内容有问题
		  System.out.println("Please check your provided http address!");
e.printStackTrace();
	 } 
catch (IOException e)
  {
	        // 发生网络异常
		e.printStackTrace();
	 } finally {
		         /*6 .释放连接*/
			getMethod.releaseConnection();		   
		    }

 

这里值得注意的几个地方是:

  1. 设置连接超时和请求超时,这两个超时的意义不同,需要分别设置。
  2. 响应状态码的处理。
  3. 返回的结果可以为字节数组,也可以为 InputStream,而后者在网页内容数据量较大的时候推荐使用。

在处理返回结果的时候可以根据自己的需要,进行相应的处理。如笔者是需要保存网页

到本地,因此就可以写一个 saveToLocaleFile(byte[] data, String filePath) 的方法,将字节数组保存成本地文件。后续的简易爬虫部分会有相应的介绍。

转载来源:http://tgyd2006.iteye.com/category/27104?show_full=true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzj0470

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值