HttpClient Method
简介
这篇文章主要是简略的介绍怎样去使用HttpClient提供的方法。这里不可能面面俱到,我会简单的介绍下每个方法的基本操作以及能使你的应用程序运行起来。想得到更多的信息,可参照这里http://hc.apache.org/httpclient-3.x/apidocs/index.html。
以下的例子程序可能并不是很全,仅仅强调每一种方法重要的独一无二的功能。如需完整的例子,请参照这里
http://svn.apache.org/viewvc/httpcomponents/oac.hc3x/trunk/src/examples/。
HttpClient主要包含以下几种方法,这里只对Options,Get,Head,Post做介绍。
Options,Get ,Head,Post ,Multipart Post ,Put ,Delete ,Trace。
Options
简介
OPTIONS 方法描述了Requst/response chain允许的通信操作的请求信息,此信息被定义在请求的URL中。这个方法允许客户端去定义请求的相关资源以及操作,或者服务端的性能,而不用去发起一个资源请求动作。
主要用途
Options代表性的方法是用来定义服务端支持那些方法,只需通过getAllowedMethods方法。
OptionsMethod options = new OptionsMethod(http://jakarta.apache.org);
//执行方法 处理任何错误信息
Enumeration allowedMethods = options.getAllowedMethods();
Options.releaseConnection();
GET
简介
Get方法获取任何信息都是通过Requset-URL来实现的。如果Request-URL指向数据生产程序,在resposne里将会返回生产出来的数据而不是程序的源代码文本,除非该程序就是输出一个文本。
若请求信息中包含If-Unmodified-Since, If-Match, If-None-Match, If-Range header 这些字段,GET方法意为“有条件的GET”,只有在特定的情况下才会发送Get请求。这就避免了由于客户端没有将传输数据准备好,或是无谓的刷新页面而带来的网络消耗。
主要用途
Get方法主要是用来从服务端下载文档。可以用getResposneBody,getResponse
-BodyAsStream,getResponseBodyAsString这些方法来完成。一般情况下,不需要在处理数据前缓存所有的数据到内存中时,getResponseBodyAsStream方法是最好的选择。
GetMethod get = new GetMethod(http://httpcomponents.apache.org);
//执行并处理异常
……
InputStream in = get.getResponseBodyAsStream();
//从input stream中取得数据并处理
get.releaseConnection();
Head
简介
HEAD方法和GET方法很相似,唯一不同的地方在于Head方法要求服务端不能够返回消息体。通过Head方法获得的HTTP headers信息必须要和Get方法取得的headers信息相吻合。这样我们就可以通过Head方法在不传输实际资源的情况下获知资源meta的信息。
通常我们使用Head方法去测试超链接可访问性。
当我们的程序实现了缓存机制,那么通过Response中的HEAD信息来判断缓存内容和当前内容是否有不同就显得尤为重要,比如,通过比对Content-Length,Content-MD5,Etag,Last-Modified就可判断出真正的内容是否存在更新,以便于我们将程序中的内容缓存进行及时的更新。
主要用途
Head方法主要用来检索Response中的meta信息,以此来判断资源是否已被更改。而使用header方法上并没有和其他方法有什么不同,可以通过getResponseHeaders()来完成。
HeadMethod head = new HeadMethod("http://jakarta.apache.org");
// execute the method and handle any error responses.
...
// Retrieve all the headers.
Header[] headers = head.getResponseHeaders();
// Retrieve just the last modified header value.
String lastModified =
head.getResponseHeader("last-modified").getValue();
POST
简介
Post方法用来完成这样的请求,在URL中用将数据单独封装成一个实体Requset-Line来作为请求一个子资源发送到服务端。这意为着数据通常被服务器端程序存储到服务端。
Post方法包含以下几个功能点:
· 现有资源的注释
· 向布告栏,新闻组,邮件列表或是类似的组织发送消息
· 向数据处理程序发送一组form表单的数据。
· 通过附加操作扩展数据库
主要用途
在使用Post方法时主要有俩个步骤,第一给Request提供数据,第二读取服务端返回的Response。
提供Requset数据有俩中方式,setRequsetBody,这种方式可以以InputStream,NameValuePair对象数组和String作为输入参数。最简单的表单就是去输入一个NameValuePair并且允许HttpClient依据规范来格式化Request body。
POST方法返回的Response body可以通过getResponseBody来读取。
PostMethod post = new PostMethod("http://jakarata.apache.org/");
NameValuePair[] data = {
new NameValuePair("user", "joe"),
new NameValuePair("password", "bloggs")
};
post.setRequestBody(data);
// execute method and handle any error responses.
...
InputStream in = post.getResponseBodyAsStream();
// handle response.