HttpClient4 用法 由HttpClient3 升级到 HttpClient4 必看(2)

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

<form action="http://localhost/index.html" method="POST"

enctype="multipart/form-data">

<input type="text" value="中国"/>

<input type="text" value="value2"/>

<input type="file"/>

<inupt type="submit" value="submit"/>

</form>

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

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(“”);

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。

到此处可以去下载这些源代码:

另外,还需要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.NameValuePair;

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.BasicNameValuePair;

import org.apache.http.protocol.HTTP;

import org.apache.http.util.EntityUtils;

public class Test2 {

public static void main(String[] args) throws Exception {

DefaultHttpClient httpclient = new DefaultHttpClient();      //实例化一个HttpClient

HttpResponse response = null;

HttpEntity entity = null;

httpclient.getParams().setParameter(

ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);  //设置cookie的兼容性

HttpPost httpost = new HttpPost("http://127.0.0.1:8080/pub/jsp/getInfo");          //引号中的参数是:servlet的地址

List <NameValuePair> nvps = new ArrayList <NameValuePair>();                   

nvps.add(new BasicNameValuePair("jqm", "fb1f7cbdaf2bf0a9cb5d43736492640e0c4c0cd0232da9de")); 

//  BasicNameValuePair("name", "value"), name是post方法里的属性, value是传入的参数值

nvps.add(new BasicNameValuePair("sqm", "1bb5b5b45915c8"));

httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));            //将参数传入post方法中

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3fbd9af29ca2b245686edfc691f74b17.html