HttpClient学习(1)

HTTPClient GET方法使用

1. 创建 HttpClient 的实例

2. 创建某种连接方法的实例,在这里是 GetMethod。在 GetMethod 的构造函数中传入待连接的地址

3. 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例

4. 读 response

5. 释放连接。无论执行方法是否成功,都必须释放连接

6. 对得到后的内容进行处理

jar包,httpclient对commons-codec和commons.logging有依赖

commons-httpclient-3.1.jar
commons-codec-xxx.jar
commons-logging-xxx.jar

package http.yang;


import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.*;

public class SimpleClient {
    public static void main(String[] args) throws IOException
    {
    	
    	//构造HttpClient的实例
    	HttpClient httpClient = new HttpClient();
    	//创建GET方法的实例
    	GetMethod getMethod = new GetMethod("http://www.baidu.com");
    	//使用系统提供的默认的恢复策略
    	getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
    	new DefaultHttpMethodRetryHandler());
    	try {
    	//执行getMethod
    	int statusCode = httpClient.executeMethod(getMethod);
    	if (statusCode != HttpStatus. SC_OK) {
    	System.err.println("Method failed: "
    	+ getMethod.getStatusLine());
    	}
    	//读取内容
    	byte[] responseBody = getMethod.getResponseBody();
    	//处理内容
    	System.out.println(new String(responseBody));
    	} catch (HttpException e) {
    	//发生致命的异常,可能是协议不对或者返回的内容有问题
    	System.out.println("Please check your provided http address!");
    	e.printStackTrace();
    	} catch (IOException e) {
    	//发生网络异常
    	e.printStackTrace();
    	} finally {
    	//释放连接
    	getMethod.releaseConnection();
    	}
    	}
} 

如果结果出现乱码情况是编码问题,修改编码方式就可以了。

程序说明:

  • 创建GET方法的实例。在GET方法的构造函数中传入待连接的地址即可。用GetMethod将会自动处理转发过程,如果想要把自动处理转发过程去掉的话,可以调用方法setFollowRedirects(false)。
  • 调用实例httpClient的executeMethod方法来执行getMethod。由于是执行在网络上的程序,在运行executeMethod方法的时候,需要处理两个异常,分别是HttpException和IOException。引起第一种异常的原因主要可能是在构造getMethod的时候传入的协议不对,比如不小心将"http"写成"htp",或者服务器端返回的内容不正常等,并且该异常发生是不可恢复的;第二种异常一般是由于网络原因引起的异常,对于这种异常 (IOException),HttpClient会根据你指定的恢复策略自动试着重新执行executeMethod方法。HttpClient的恢复策略可以自定义(通过实现接口HttpMethodRetryHandler来实现)。通过httpClient的方法setParameter设置你实现的恢复策略,本文中使用的是系统提供的默认恢复策略,该策略在碰到第二类异常的时候将自动重试3次。executeMethod返回值是一个整数,表示了执行该方法后服务器返回的状态码,该状态码能表示出该方法执行是否成功、需要认证或者页面发生了跳转(默认状态下GetMethod的实例是自动处理跳转的)等。
  • 取得目标地址的内容有三种方法:第一种,getResponseBody,该方法返回的是目标的二进制的byte流;第二种,getResponseBodyAsString,这个方法返回的是String类型,值得注意的是该方法返回的String的编码是根据系统默认的编码方式,所以返回的String值可能编码类型有误;第三种,getResponseBodyAsStream,这个方法对于目标地址中有大量数据需要传输是最佳的。在这里我们使用了最简单的getResponseBody方法。
  • 释放连接。无论执行方法是否成功,都必须释放连接。
  • 处理内容。将内容打印到控制台。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值