posts - 2, comments - 1, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

HttpClient学习

Posted on 2008-02-01 14:37 wary 阅读(441) 评论(0)  编辑  收藏

参考http://www.ibm.com/developerworks/cn/opensource/os-httpclient/,以备个人学习所用

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
HttpClient 提供的主要的功能:

  • 实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
  • 支持自动转向
  • 支持 HTTPS 协议
  • 支持代理服务器等

HttpClient 基本功能的使用

GET 方法

使用 HttpClient 需要以下 6 个步骤:

1. 建 HttpClient 的实例

HttpClient httpClient = new HttpClient();

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

GetMethod getMethod = new GetMethod("http://www.tom.com/");

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

int statusCode = httpClient.executeMethod(getMethod);

if (statusCode ==HttpStatus.SC_OK) 则说明成功了

4. 读 response

byte[] responseBody = method.getResponseBody();

String responseBody = method.getResponseBodyAsString();

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

method.releaseConnection();

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

POST方法

根据RFC2616,对POST的解释如下:POST方法用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列(Request-Line)中请求URI所指定资源的附加新子项。POST被设计成用统一的方法实现下列功能:

  • 对现有资源的注释(Annotation of existing resources)
  • 向电子公告栏、新闻组,邮件列表或类似讨论组发送消息
  • 提交数据块,如将表单的结果提交给数据处理过程
  • 通过附加操作来扩展数据库

调用HttpClient中的PostMethod与GetMethod类似,除了设置PostMethod的实例与GetMethod有些不同之外,剩下的步骤都差不多。

注意:

(1)表单中的域用类NameValuePair来表示,该类的构造函数第一个参数是域名,第二参数是该域的值

(2)将表单所有的值设置到PostMethod中用方法setRequestBody

(3)HttpClient对于要求接受后继服务的请求,比如POST和PUT,不支持自动转发,因此需要自己对页面转向做处理

(4)301表示永久的移走(Moved Permanently),当返回的是301,则表示请求的资源已经被移到一个固定的新地方,任何向该地址发起请求都会被转到新的地址上。302表示暂时的转向,比如在服务器端的servlet程序调用了sendRedirect方法,则在客户端就会得到一个302的代码,这时服务器返回的头信息中location的值就是sendRedirect转向的目标地址。

String url = "http://www.abc.com";

PostMethod postMethod = new PostMethod(url);              

NameValuePair[] data = { new NameValuePair("id", "youUserName"),

new NameValuePair("passwd", "yourPwd") };

postMethod.setRequestBody(data);

int statusCode = httpClient.executeMethod(postMethod);

// 301或者302

if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY ||

statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {

// 从头中取出转向的地址

Header locationHeader = postMethod.getResponseHeader("location");

String location = null;

if (locationHeader != null) {

location = locationHeader.getValue();

System.out.println("The page was redirected to:" + location);

} else {

System.err.println("Location field value is null.");

}

return;

}


只有注册用户登录后才能发表评论。


网站导航: