[置顶] android网络通讯之HttpClient4不指定参数名发送Post
在HttpClient4之前都是通过List<NameValuePair>键值对的形式来向服务器传递参数 ,在4.0版本中在加入了不指定参数名发送数据的形式,利用StringEntity来完成,相当于向一个流写入请求。
HttpClient4中采用ThreadSafeClientConnManager来保证线程的安全,优于2.0的MultiThreadedHttpConnectionManager类。另外Apache官方强烈推荐只使用一个HttpClient的实例,所以我们可以将以下demo方法写成单例模式。可以参考我的博文http://blog.csdn.net/caicongyang/article/details/9498437
demo将使用StringEntity来完成不指定参数名发送Post,已经采用ThreadSafeClientConnManager来保证线程的安全
/** 发送报文到GPRS网关 */
public String sendToHttpClientGprs(String url,String content) {
BufferedReader reader = null;
StringBuffer stringBuffer = null;
HttpParams httpParams = new BasicHttpParams();
// 设置超时
ConnManagerParams.setTimeout(httpParams, 5*1000);
HttpConnectionParams.setConnectionTimeout(httpParams, 5*1000);
HttpConnectionParams.setSoTimeout(httpParams, 5*1000); // 多线程最大连接数
ConnManagerParams.setMaxConnectionsPerRoute(httpParams, new ConnPerRouteBean(5));
// 多线程总连接数
ConnManagerParams.setMaxTotalConnections(httpParams, 10);
// 设置异常处理机制
HttpProtocolParams.setUseExpectContinue(httpParams, true);
// 设置是否检查旧连接
HttpConnectionParams.setStaleCheckingEnabled(httpParams, false);
// 设置版本
HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);
// 设置编码
HttpProtocolParams.setContentCharset(httpParams, HTTP.UTF_8);
// 设置重定向
HttpClientParams.setRedirecting(httpParams, false); // 设置userAgent
String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2) Gecko/20100115 Firefox/3.6";
HttpProtocolParams.setUserAgent(httpParams, userAgent); //设置是否延迟发送
HttpConnectionParams.setTcpNoDelay(httpParams, true);
//设置缓存大小
HttpConnectionParams.setSocketBufferSize(httpParams, DEFAULT_SOCKET_BUFFER_SIZE); // 支持http与https
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443)); //ThreadSafeClientConnManager线程安全管理类
ClientConnectionManager manager = new ThreadSafeClientConnManager(httpParams, schemeRegistry);
HttpClient client = new DefaultHttpClient(manager, httpParams);
//post请求
HttpPost httppost = new HttpPost(path);
httppost.setHeader("connection", "Keep-Alive");
httppost.setHeader("Content-Type", "text/plain");
try {
//直接传入发送内容,不指定参数名
StringEntity myEntity = new StringEntity(content, "UTF-8");
httppost.setEntity(myEntity);
// 发送请求
HttpResponse response = client.execute(httppost);
Log.i("ResponseCode", response.getStatusLine().getStatusCode() + "");
// 请求成功
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
stringBuffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
stringBuffer.append(line);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 关闭流
if (null != reader) {
reader.close();
reader = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
if (null == stringBuffer) {
return "-1";
} else {
return stringBuffer.toString();
}
}
[置顶] android网络通讯之HttpClient4不指定参数名发送Post的更多相关文章
- [置顶]
Android Glide传Context引发的非法参数异常那些小坑
今天中午调试一直出现nullContext 我的代码如下 解决办法: Glide.with(mContext) .load(mdl.getImage()) .centerCrop() .placeho ...
- [置顶] Android开发笔记(成长轨迹)
分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...
- [置顶] android之存储篇_SQLite数据库_让你彻底学会SQLite的使用
SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么. 例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中 ...
- [置顶] Android 高级开发 源码 UI 缓存 网络
1.Android 源码剖析 性能优化 开源代码 2.Android UI效果源码 3.http://mzh3344258.blog.51cto.com/1823534/d-3 4.微信公众平台开发 ...
- [置顶] Android图片异步加载之Android-Universal-Image-Loader
将近一个月没有更新博客了,由于这段时间以来准备毕业论文等各种事务缠身,一直没有时间和精力沉下来继续学习和整理一些东西.最近刚刚恢复到正轨,正好这两天看了下Android上关于图片异步加载的开源项目,就 ...
- [置顶] Android应用开发之版本更新你莫愁
传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 今天我们学习如何实现Android应用的自动更新版本功能,这是在各种语言编写的应用中都 ...
- [置顶] Android AlarmManager实现不间断轮询服务
在消息的获取上是选择轮询还是推送得根据实际的业务需要来技术选型,例如对消息实时性比较高的需求,比如微博新通知或新闻等那就最好是用推送了.但如果只是一般的消息检测比如更新检查,可能是半个小时或一个小时一 ...
- [置顶] [Android源码分析]inquiry result引起的上层变化分析
在上一篇文章中,我们详细分析了android是如何解析蓝牙反馈上来的搜索到的设备信息,本文将会继续分析这些信息到了上层之后是如何处理. 8.inquiry result引起的上层变化 我们知道inqu ...
- [置顶] Android安全机制分析
Android系统是基于Linux内核开发的,因此,Android系统不仅保留和继承了Linux操作系统的安全机制,而且其系统架构的各个层次都有独特的安全特性[2] . 1. Linux内核层安全机制 ...
随机推荐
- C++ 变量的声明与定义的区别
变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点 ...
- UVa1225 Digit Counting
#include <stdio.h>#include <string.h> int main(){ int T, N, i, j; int a[10]; sc ...
- Java "==和equals区别" 示例
import java.util.Calendar; import java.util.Date; import java.util.Locale; public class test { publi ...
- Sublime Text3安装SublimeREPL插件以及快捷键设置
SublimeREPL是Sublime Text的一个插件,它除了可以使你在ST中运行解释器(REPL),还有对Python语言的特别支持,包括在本地/远程(远程仅在linux/osx平台可用)vir ...
- windows下安装MySQLdb模块
从http://www.codegood.com/downloads 下载mysqldb相应的exe文件直接安装. 我用的是MySQL-python-1.2.3.win32-py2.7.exe
- android-意图Intent
Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递 Intent 来 ...
- css 定义hr的几种样式
<style type="text/css"> <!-- .hr0{ height:1px;border:none;border-top:1px dashed # ...
- php如何在原来的时间上加一天?一小时
php如何在原来的时间上加一天?一小时? <?phpecho "今天:",date('Y-m-d H:i:s'),"<br>";echo &q ...
- cocos2dx中的其他层
在cocos2dx中,CCLayer默认是黑色的,但是有时候需要有其他颜色北京的图层,那么就需要用到CCLayerColor 如下代码: ccColor4B color =ccc4(255, 0, 0 ...
- Microsoft Accelerator for Windows Azure Alum Azuqua 今天启动
云最大的一个优势就是,它使开发人员比以往任何时候都更迅速.更灵活.在 Windows Azure 中开发应用程序时,工程师无需考虑架设服务器.规划容量或进行日常维护.相反,他们可以专注于提出假设 ...