设为首页 加入收藏

TOP

HttpClient4 用法 由HttpClient3 升级到 HttpClient4 必看(二)
2015-07-16 12:55:51 来源: 作者: 【 】 浏览:25
Tags:HttpClient4 用法 HttpClient3 升级 必看
方式是在request-body中提供参数,此方式只能用于POST请求。在 HttpClient程序包中有两个类可以完成此项工作,它们分别是UrlEncodedFormEntity类与MultipartEntity类。这两个类均实现了HttpEntity接口。


(1)


使用最多的是UrlEncodedFormEntity类。通过该类创建的对象可以模拟传统的HTML表单传送POST请求中的参数。如下面的表单:



? ?


? ?


? ?



我们可以用下面的代码实现:


List formParams = new ArrayList();


formParams.add(new BasicNameva luePair("param1", "中国"));


formParams.add(new BasicNameva luePair("param2", "value2"));


HttpEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");


HttpPost request = new HttpPost(“http://localhost/index.html”);


request.setEntity(entity);


当然,如果想查看HTTP数据格式,可以通过HttpEntity对象的各种方法取得。如:


List formParams = new ArrayList();


formParams.add(new BasicNameva luePair("param1", "中国"));


formParams.add(new BasicNameva luePair("param2", "value2"));


UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");


System.out.println(entity.getContentType());


System.out.println(entity.getContentLength());


System.out.println(EntityUtils.getContentCharSet(entity));


System.out.println(EntityUtils.toString(entity));


上例的打印结果如下:


? ? Content-Type: application/x-www-form-urlencoded; charset=UTF-8


? ? 39


? ? UTF-8


? ? param1=%E4%B8%AD%E5%9B%BD¶m2=value2


(2)


除了传统的application/x-www-form-urlencoded表单,我们另一个经常用到的是上传文件用的表单,这种表单的类型为 multipart/form-data。在HttpClient程序扩展包(HttpMime)中专门有一个类与之对应,那就是 MultipartEntity类。此类同样实现了HttpEntity接口。如下面的表单:



? ? ? ? enctype="multipart/form-data">


? ?


? ?


? ?


? ?



我们可以用下面的代码实现:


MultipartEntity entity = new MultipartEntity();


entity.addPart("param1", new StringBody("中国", Charset.forName("UTF-8")));


entity.addPart("param2", new StringBody("value2", Charset.forName("UTF-8")));


entity.addPart("param3", new FileBody(new File("C:\\1.txt")));


HttpPost request = new HttpPost(“http://localhost/index.html”);


request.setEntity(entity);


HTTP响应


HttpClient程序包对于HTTP响应的处理较之HTTP请求来说是简单多了,其过程同样使用了HttpEntity接口。我们可以从 HttpEntity对象中取出数据流(InputStream),该数据流就是服务器返回的响应数据。需要注意的是,HttpClient程序包不负责解析数据流中的内容。如:


HttpUriRequest request = ...;


HttpResponse response = httpClient.execute(request);


// 从response中取出HttpEntity对象


HttpEntity entity = response.getEntity();


// 查看entity的各种指标


System.out.println(entity.getContentType());


System.out.println(entity.getContentLength());


System.out.println(EntityUtils.getContentCharSet(entity));


// 取出服务器返回的数据流


InputStream stream = entity.getContent();


// 以任意方式操作数据流stream


// 调用方式 略


附注:


本文说明的是HttpClient 4.0.1,该程序包(包括依赖的程序包)由以下几个JAR包组成:


commons-logging-1.1.1.jar


commons-codec-1.4.jar


httpcore-4.0.1.jar


httpclient-4.0.1.jar


apache-mime4j-0.6.jar


httpmime-4.0.1.jar


可以在此处下载完整的JAR包。


现在Apache已经发布了:HttpCore 4.0-beta3、HttpClient 4.0-beta1。


到此处可以去下载这些源代码:http://hc.apache.org/downloads.cgi


另外,还需要apache-mime4j-0.5.jar 包。


在这里先写个简单的POST方法,中文资料不多,英文不太好。


package test;


import java.util.ArrayList;


import java.util.List;


import org.apache.http.Header;


import org.apache.http.HttpEntity;


import org.apache.http.HttpResponse;


import org.apache.http.Nameva luePair;


import org.apache.http.client.entity.UrlEncodedFormEntity;


import org.apache.http.client.methods.HttpPost;


import org.apache.http.client.params.CookiePolicy;


import org.apache.http.client.params.ClientPNames;


import org.apache.http.impl.client.DefaultHttpClient;


import org.apache.http.message

首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇使用HttpClient4来构建Spring Res.. 下一篇C++ stderr/stdout 重定向到文件

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: