为什么80%的码农都做不了架构师?>>>   

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

转载于:https://my.oschina.net/pmroad/blog/357075

MultipartEntity与UrlEncodedFormEntity区别相关推荐

  1. HttpClient和HttpURLConnection的使用和区别(上)

    转自:点击打开链接 相信很多Android开发者碰到涉及到Http协议的需求时,都和我一样在犹豫是使用HttpClient还是使用HttpURLConnection呢.我在网上也搜索了很多文章,来分析 ...

  2. WebService SOAP、Restful和HTTP(post/get)请求区别

    web service(SOAP) Webservice的一个最基本的目的就是提供在各个不同平台的不同应用系统的协同工作能力.  Web service 就是一个应用程序,它向外界暴露出一个能够通过W ...

  3. androidentity什么用_Android multipartentity的用法

    最近写一个程序,android手机端上传多个图片到asp.net服务器端,使用httpclient,在网上查到了使用multipartentity.上传测试时总是出现(500)Internal Ser ...

  4. DefaultHttpClient 与 AndroidHttpClient 的区别

    前言 上一篇文章介绍了使用HttpURLConnection来完成对于HTTP协议的支持.现在介绍一个新的方式来访问Web站点,那就是HttpClient. HttpClient是Apache开源组织 ...

  5. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  6. C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别

    最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...

  7. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

    GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...

  8. Python2 与 Python3 区别

    Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...

  9. Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别

    Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...

最新文章

  1. 用Unity和C#创建在线多人游戏学习教程
  2. discovery_01
  3. 【Python基础知识-pycharm版】第四节-元组
  4. 钱 | 钱,钱,钱,钱,钱,钱,钱!钱啊钱!(配音乐)
  5. 使用GetThumbnailImage进行图片缩放操作
  6. 海南计算机考研和培训哪个比较好,海南考研集训营前十排名
  7. 移动web开发之flex布局笔记
  8. Android UI(一)Layout 背景局部Shape圆角设计
  9. 【汇编】DOS系统功能调用(INT 21H)
  10. Java中用System.getProperty(...)获取系统属性
  11. 家用投影机预埋布线图_家庭影院装修如何布线(装修前必看·附图)
  12. 即时通讯(IM)开源项目OpenIM每周迭代版本发布-音视频实时通话-v2.0.4
  13. 哦耶OYE-0001 OpenWrt路由器折腾记(by quqi99)
  14. 【归档】爬取马蜂窝景点信息(含源代码)
  15. 从欧洲旅游到买房移民希腊的考察全记录!
  16. 津津乐道175期:李大夫夜话:父母皆祸害?
  17. 认识数据仓库建设意义
  18. 第十五个“世界海洋日”:水声功率放大器能为海洋水下声呐研究做些什么?
  19. 计算机右击管理在哪,电脑权限管理在哪里
  20. 15- 决策回归树, 随机森林, 极限森林 (决策树优化) (算法)

热门文章

  1. Nodejs教程14:querystring模块
  2. 可视化的Redis数据库管理工具redis-desktop-manager的初步使用(图文详解)
  3. Python3.6.4 安装
  4. LINUX在逻辑卷基础加盘操作步骤
  5. 订单可视化(智能制造、流程再造、企业信息化) 第一篇 缘起
  6. HashMap原理和使用
  7. 寻找兄弟单词(2012.5.6百度实习)
  8. 拆数,给定两个正整数m,n(m = n),将m拆成n个数相加...(游戏)
  9. [转帖]ASP.NET中常用的优化性能的方法
  10. 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)...