Http客户端再封装
Android系统上推荐的Http客户端从Apache变成[HttpURLConnection],主要理由包括
*
不过因为UrlConnection这组接口时间较早(Java 1.0),
接口的设计并不好[Traps1][Traps2]。下面提供一个更现代的接口[Source]。
总体设计
一个Http申请分成几个步骤,其中括号引用的步骤为可选操作。
请求构造 => (生成请求内容) => 执行请求 => 响应处理 => 响应结果 这几个部分。
一个典型的请求操作可以写为
HttpClient.get("url").with(pname, value).toFile("file name").execute().close();
由于使用HttpURLConnection做为底层实现,它自动上复用实际的Socket连接.
其中HttpClient为工厂,提供以Http方法为方法名的默认HttpRequest构造。
还可以通过注册HttpRequestHandler来设置默认的HttpRequest参数。
与HttpURLConnection不同,execute实际的IO请求发生的地方,它先会调用HttpResponseHandler, 可以
预处理HttpResponse的消息头等内容.
HttpResponse对应一次服务器响应, 除了基本的Reader/InputStream接口外,它还提供一些方便方法,如
写入文件等。
大部情况下,不需要显式对execute的返回值做处理,因为它会在HttpResponseHandler中处理。
如果显示处理HttpResponse需要注意,它可能阻塞,超时,并抛出异常。
一些复杂的情况处理
大部分处理都使用到了两个接口中即HttRequestHandler和HttpResponseHandler,前者在构造Request时,
调用,主要处理Requset的相关头域, 后者主要是用于读取响应中的头域,另外可以对错误响应做处理。
需要注意,HttpRequestHandler可能有多个,调用次序不确定, HttpResponseHandler只能有一个,在进
行实际IO时调用.
Cookie使用
通过setCookie(pname, value, host)或setCookieManager来向Request添加请求。
通过getCookie()得到一个cookie的容器。
TLS加密
Url会根据https前缀自动选用Https协议,但需要提供相应的TLS连接用证书和验证能力。这些都可以
通过httpRequestHandler完成。
Multipart attachement
与Post方法一样,添加内容是通过在ReqestHandler中完成,主要方式通过
getInputStream();
beginMultiPart(MimeType, boundary);
addContent(name, Readable);
addContent(name, MimeType, Readable);
endMultiPart();
close();
一些引用
[Source]https://github.com/anthonyhl/httpclient
[HttpURLConnection]:http://developer.android.com/reference/java/net/HttpURLConnection.html
[Traps1]:http://www.javaworld.com/article/2075162/core-java/dodge-the-traps-hiding-in-the-urlconnection-class.html
[Traps2]:http://www.blogjava.net/supercrsky/articles/247449.html
Http客户端再封装的更多相关文章
- iOS开发之网络请求(基于AFNetworking的再封装)
最近一直很忙也没有什么时间写博客了.放假了休息一下,就写一篇博客来总结一下最近做项目中出现过的问题吧!!! 首先,在项目中我的起到了什么作用,无非就是把美工(UI设计师)给我们的图显示出来,然后再和服 ...
- 对Zlib单元进行再封装
对Zlib单元进行再封装 低版本DELPHI,如D7,ZLIB.pas单元封装的很简陋,因此有必要再封装,以增加使用的便利性. 高版本DELPHI,zlib.pas本身提供的接口已经相当完善. Zli ...
- 打印 Logger 日志时,需不需要再封装一下工具类?
在开发过程中,打印日志是必不可少的,因为日志关乎于应用的问题排查.应用监控等.现在打印日志一般都是使用 slf4j,因为使用日志门面,有助于打印方式统一,即使后面更换日志框架,也非常方便.在 < ...
- 跨平台的游戏客户端Socket封装,调整
原文链接:http://www.cnblogs.com/lancidie/archive/2013/04/13/3019359.html 头文件: #pragma once #ifdef WIN32 ...
- RecyclerView再封装
RecyclerView做为ListView的替代品,已经出了很久了,既然是替代品,那自然有些ListView没有的优点.比如说:可以随意切换list,grid,stagger.可以指定一个或多个it ...
- c# AutoMapper 使用方式和再封装
安装方式:使用vs自带的nuget管理工具,搜索AutoMapper ,选择第一个安装到你的项目即可. 我从网上找了一些资料, 参考网址:http://blog.csdn.net/csethcrm/a ...
- 新浪微博客户端(3)-封装UIBarButtonItem
单独给NavigationBar上的两个NavigationItem设置图片显得比较麻烦,下面对创建单个UIBarButtonItem的过程进行封装. UIBarButtonItem+Extensio ...
- mvc中使用Pagination,对其进行再封装
对其进行再次封装: (function($) { $["fn"]["easyPaging"] = function(o) { if (!o.pageSelect ...
- select客户端模型封装——回调方式快速建立客户端
SockClient.h #pragma once #include<functional> #define _WINDOWS #ifdef _WINDOWS #define _WINSO ...
随机推荐
- 《python基础教程(第二版)》学习笔记 列表/元组(第2章)
<python基础教程(第二版)>学习笔记 列表/元组(第2章)序列中的下标从0开始x='ABC' ==> x[0]='A', x[1]='B', x[2]='C'负数索引从右边开始 ...
- Unigui unidbgrid+unidac uniquery联合使用时产生的奇葩问题
如下一个uniquery查询: SELECT a.id,a.userid,a.name,if(a.completed='T',CONCAT('<a class="icons" ...
- Qt之界面实现技巧-- 窗体显示,绘制背景,圆角,QSS样式
转自 --> http://blog.sina.com.cn/s/blog_a6fb6cc90101dech.html 总结一下,在开发Qt的过程中的一些技巧!可遇而不可求... 一.主界面 1 ...
- javascript中的this值
如何确定this的值 this值会被传递给所有函数,this的值是基于运行时调用函数的上下文. 例如:从全局作用域调用sayFoo函数时,this引用window对象, 当它作为myObject的一 ...
- ZSetOperations
有序集合,默认按照score升序排列,存储格式K(1)==V(n),V(1)=S(1)(K=key,V=value,S=score) 1.add(K,V,S):添加 2.count(K,Smin,Sm ...
- 一个基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度
摘 要 在搜索引擎的检索结果页面中,用户经常会得到内容相似的重复页面,它们中大多是由于网站之间转载造成的.为提高检索效率和用户满意度,提出一种基于特征向量的大规模中文近似网页检测算法DDW(Det ...
- [深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)
简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件.数据库.网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作. 这就可以使用线程来实现. ...
- BEC listen and translation exercise 43
Reach for the stars so if you fall you land on a cloud.飞向星空吧,就算坠落,接住你的也是云彩. Anyway, exam failure can ...
- MFC工程名称与所包含文件名称的关系(工程名可以更改,输出的.dll.exe.lib都以最后工程名命名为准)
创建MFC应用程序时,可以规定MFC程序的工程名称,假设初始为MFCApp,则此后该应用程序的资源文件名称,继承自CWinApp的那个类,包括.def文件,.odl文件等都会以MFCApp打头. 但是 ...
- stl_slist.h
stl_slist.h // Filename: stl_slist.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http:/ ...