文档章节

MultipartEntity与UrlEncodedFormEntity区别

p
 pm-road
发布于 2014/12/17 14:21
字数 602
阅读 23
收藏 0

 

详细说明查看: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”)));

本文转载自:http://rqlipeng.iteye.com/blog/2156888

p
粉丝 6
博文 69
码字总数 638
作品 0
海淀
私信 提问
MultipartEntity与UrlEncodedFormEntity

html中的form 表单有两种:除了传统的application/x-www-form-urlencoded表单,我们另一个经常用到的是上传文件用的表单,这种表单的类型为multipart/form-data。 后者主要是用来上传文件所用...

SKYCOBS
2016/01/18
83
0
学习脚步--- HttpClient4.0, multipartEntity (转)

学习脚步--- HttpClient4.0 Apache网络协议网络应用应用服务器HTML HttpClient程序包是一个实现了 HTTP 协议的客户端编程工具包,要想熟练的掌握它,必须熟悉 HTTP协议。一个最简单的调用如下...

丁佳辉
2015/10/15
42
0
Android HttpClient上传文件与Httpconnection知识小结

Android上传文件到服务端可以使用HttpConnection 上传文件,也可以使用Android封装好的HttpClient类。当仅仅上传文件可以直接使用httpconnection 上传比较方便快捷。 1、使用HttpConection上...

安克诚
2012/07/11
551
0
MultipartEntity multipartEntity=new MultipartEntity();使用这个出错,红色部分是出错的地方

package com.my.myhttpclient; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodin......

冬天的梦
2015/11/19
1K
0
HttpClient_4 用法 由HttpClient_3 升级到 HttpClient_4 必看

HttpClient程序包是一个实现了 HTTP 协议的客户端编程工具包,要想熟练的掌握它,必须熟悉 HTTP协议。一个最简单的调用如下:

落落的月
2012/05/11
849
0

没有更多内容

加载失败,请刷新页面

加载更多

给予消息队列实现分布式事务

给予消息队列实现分布式事务 场景: 订单系统产生订单,购物车系统减购物车中的商。 实现思路 : 订单系统在消息队列上开启一个事务(没有创建订单)。 订单系统给消息服务器发送一个“半消息”...

刘一草
22分钟前
3
0
Jpa同一个事务中对同一数据先改后查,获取数据并未改变。

一、事件原因。 在使用JPA的时候。在同一个事务中,对某条数据。先查询,然后更新,再查询。由于第2次查询是从缓存取得第1次查询的结果。会出现2种情况: 如果更新是用save()等JPA自带的语句...

王坤charlie
29分钟前
3
0
log4j起不来: No appenders could be found for logger

在mvn test时,log4j一起起不来,log message打不出来 原因: log4j.properties 文件没不存在,或存在,但放错路径 解:把log4j.properties放入mvn 默认的resources跑路径下面:./src/main/...

Rebecca_Hu
45分钟前
5
0
ETH 开发工作记录

测试是否连接成功 String web3ClientVersion = web3j.web3ClientVersion().send().getWeb3ClientVersion(); log.info("version=" + web3ClientVersion);...

xiaodong16
46分钟前
3
0
ntpserver配置

# For more information about this file, see the man pages # ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5). driftfile /var/lib/ntp/drift # Permit ti......

Archer99
52分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部