`

MultipartEntity与UrlEncodedFormEntity区别

阅读更多

 

详细说明查看:http://www.pm-road.com/index.php/2014/10/16/118/

MultipartEntity与UrlEncodedFormEntity区别

今天在弄安卓项目的时候,碰到一个问题,就是安卓在登录请求服务器的时候,总是报Caused by: java.net.ConnectException: failed to connect to /127.0.0.1 (port 8080) after 90000ms: isConnected failed: ECONNREFUSED (Connection refused) ,一开始的时候,我将post请求换成get 请求,都不行,我以为还是安卓权限什么的问题呢,后来经过排除发现不是,在浏览器中输入webservice地址就可以成功,但是在服务器经过JUnit 测试 发现不能请求,此时将注意力从安卓转移到了服务器上,

开始的时候封装的方法是这样写的:

public static InputStream post(String url, MultipartEntity parameters) {

HttpClient client = new DefaultHttpClient();
HttpPost postrequest = new HttpPost(url);
try {
if (parameters != null) {
postrequest.setEntity(parameters);
}
HttpResponse postresponse = client.execute(postrequest);
InputStream is = postresponse.getEntity().getContent();
return is;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

 

后来发现改下面这种就可以访问成功:

 

public static InputStream post(String url, List<NameValuePair> parameters) {

HttpClient client = new DefaultHttpClient();
HttpPost postrequest = new HttpPost(url);
try {
if (parameters != null) {
UrlEncodedFormEntity formEntiry = new UrlEncodedFormEntity(parameters);
//                postrequest.setEntity(parameters);
postrequest.setEntity(formEntiry);
}
HttpResponse postresponse = client.execute(postrequest);
InputStream is = postresponse.getEntity().getContent();
return is;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

 

其中,主要是MultipartEntity与UrlEncodedFormEntity参数不同

经过在网上查询资料发现,这两个类均实现了HttpEntity接口,而二者的区别就和html表单有关系,

html中的form 表单有两种:除了传统的application/x-www-form-urlencoded表单,我们另一个经常用到的是上传文件用的表单,这种表单的 类型为multipart/form-data。  后者主要是用来上传文件所用,所以一般情况下,在使用webservice 时,使用UrlEncodedFormEntity 比较多,UrlEncodedFormEntity 可以模拟传统的HTML表单传送POST请求中的参数,

如:html表单如下:

<form action=”http://localhost/index.html” method=”POST”>
<input type=”text” name=”param1″ value=”李三”/>
<input type=”text” name=”param2″ value=”男”/>
<inupt type=”submit” value=”submit”/>
</form>

 

代码如下:

List<NameValuePair> formParams = new ArrayList<NameValuePair>();
formParams.add(new BasicNameValuePair(“param1″, “李三”));
formParams.add(new BasicNameValuePair(“param2″, “男”));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, “UTF-8″);

MultipartEntity  则与form类型为multipart/form-data 对应,如 html from 如下:

 

<form action=”http://localhost/index.html” method=”POST”
enctype=”multipart/form-data”>
<input type=”text” name=”param1″ value=”李三”/>
<input type=”text” name=”param2″ value=”男”/>
<input type=”file” name=”param3″/>
<inupt type=”submit” value=”submit”/>
</form>

代码如下:

MultipartEntity entity = new MultipartEntity();
entity.addPart(“param1″, new StringBody(“李三”, Charset.forName(“UTF-8″)));
entity.addPart(“param2″, new StringBody(“男”, Charset.forName(“UTF-8″)));
entity.addPart(“param3″, new FileBody(new File(“C:\\pic.gif”)));

分享到:
评论

相关推荐

    org.apache.http.entity.mime

    2. `MultipartEntity`: 表示一个MIME多部分实体,它可以包含多个部分,每个部分可以是简单的文本、二进制数据或其他MIME实体。 3. `FormBodyPart`: 代表MIME实体中的一个表单字段,可以包含名称、头部信息和实体...

    android参数请求与文件上传的源码

    MultipartEntity entity = new MultipartEntity(); entity.addPart("filename", new StringBody("file.txt")); entity.addPart("file", new InputStreamBody(getFileInputStream("path_to_file"), "application/...

    httpclient-jar.rar

    **MultipartEntity** 是Apache HttpClient库中的一个关键组件,专门用于处理多部分表单数据的上传,比如当我们需要在一个网页上上传多个文件时,就会用到这种格式。MultipartEntity类使得开发者能够轻松地将不同类型...

    HttpClient 4文件上传

    #### 二、核心类与接口介绍 1. **HttpClient**: - `HttpClient`是Apache HttpClient提供的核心接口,用于执行HTTP请求并获取响应。 - 在本例中使用的是`DefaultHttpClient`类,它是`HttpClient`的一个具体实现。...

    Android使用HttpClient实现上传下载功能并监控进度

    本教程将详细介绍如何利用HttpClient实现文件的上传与下载,并且实时监控进度,以便在UI上显示进度条。 首先,理解HttpClient的基本用法是至关重要的。HttpClient是Apache的一个组件,它提供了丰富的API来构建网络...

    android jar包httpmime.zip

    在Android开发中,HTTP通信是应用与服务器交互的重要方式,而`httpmime.jar`是Apache HttpClient库的一个组件,专门用于处理HTTP请求中的MIME类型数据,尤其在上传或下载文件时非常有用。这个工具包使得Android...

    httpclient发送post请求.docx

    - 文件上传:对于文件上传,可以利用MultipartEntity或MultipartEntityBuilder实现类似表单上传的行为。 HttpClient因其灵活性和安全性在Web开发中广泛应用。熟悉和掌握HttpClient的API能显著提升Java程序员处理...

    上传组件,快速方便出来上传资源问题

    MultipartEntity reqEntity = new MultipartEntity(); reqEntity.addPart(paramsName, (ContentBody) bin); StringBody body, time, _token; try { body = new StringBody(jsonParams); time = new StringBody...

    HttpClient 4 - 文件上传

    HttpClient 4 版本引入了许多改进,使得文件上传变得更加简单和高效。...这些组件和类库是理解和实现HTTP文件上传的关键,对于任何需要与Web服务器交互的Java应用来说,HttpClient都是一个不可或缺的工具。

    安卓网络通信

    可以使用UrlEncodedFormEntity或MultiPartEntity来处理不同类型的POST数据。 ```java List&lt;NameValuePair&gt; nameValuePairs = new ArrayList(2); nameValuePairs.add(new BasicNameValuePair("key1", "value1"));...

    android上传图片到web服务器

    4. **Content-Type与边界**: MultiPartEntity需要一个Content-Type头,通常是`multipart/form-data`,并且每个部分都有自己的Content-Type(例如,图片可能是`image/jpeg`或`image/png`)。同时,还需要定义一个唯一...

    HttpClient实现POST GET和文件下载

    3. **设置请求体**:如果POST请求有数据需要提交,可以使用`HttpEntityEnclosingRequestBase.setEntity()`方法设置请求实体,例如,使用`StringEntity`或`UrlEncodedFormEntity`来封装数据。 4. **执行请求**:通过...

    Android HttpClient用到的jar包

    这个库特别适用于那些需要与Web服务进行交互的应用程序。本篇将详细讲解如何利用Apache HttpClient及其相关的jar包在Android环境中进行文件上传。 首先,我们关注的是标题提到的两个jar包:“apache-mime4j-0.6.jar...

    上传图片到服务器

    2. **构建MultipartEntity**:为了上传文件,我们需要创建一个`MultipartEntity`对象,它是Apache HttpClient中的类,用于处理多部分表单数据,这种数据类型常用于文件上传。 3. **添加文件内容**:向`...

    java模拟发送form-data的请求方式

    MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, "------------------------------0ea3fcae38ff", Charset.defaultCharset()); ``` 接下来,添加多个部分到 `...

    android HttpClient

    3. `NameValuePair`与`BasicNameValuePair`:这些类用于构建POST请求的数据,如URL编码的键值对。 4. `HttpEntity`:表示HTTP响应或请求的实体内容,如文件、文本、图片等。 二、文件上传 在Android中,`...

    android上传与下载源代码

    在Android平台上进行文件上传与下载是移动应用开发中常见的需求,尤其在社交、云存储以及协同办公类应用中。这个"android上传与下载源代码"的压缩包很可能包含了一个完整的示例项目,帮助开发者理解如何在Android...

    httpmime.jar

    2. MultipartEntityBuilder:用于构建MultipartEntity的工具类,提供了丰富的设置选项,如添加部分、设置边界、编码等。 3. HttpEntity:所有HTTP实体的抽象基类,提供了获取和设置实体内容长度、读取和写入实体...

    httpclent的jar包

    你可以使用UrlEncodedFormEntity或MultipartEntity来处理不同类型的实体。 4. **执行请求**:使用HttpClient的execute方法可以发送一个已经构造好的HttpRequestBase对象。例如,`HttpResponse response = ...

Global site tag (gtag.js) - Google Analytics