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客户端再封装的更多相关文章

  1. iOS开发之网络请求(基于AFNetworking的再封装)

    最近一直很忙也没有什么时间写博客了.放假了休息一下,就写一篇博客来总结一下最近做项目中出现过的问题吧!!! 首先,在项目中我的起到了什么作用,无非就是把美工(UI设计师)给我们的图显示出来,然后再和服 ...

  2. 对Zlib单元进行再封装

    对Zlib单元进行再封装 低版本DELPHI,如D7,ZLIB.pas单元封装的很简陋,因此有必要再封装,以增加使用的便利性. 高版本DELPHI,zlib.pas本身提供的接口已经相当完善. Zli ...

  3. 打印 Logger 日志时,需不需要再封装一下工具类?

    在开发过程中,打印日志是必不可少的,因为日志关乎于应用的问题排查.应用监控等.现在打印日志一般都是使用 slf4j,因为使用日志门面,有助于打印方式统一,即使后面更换日志框架,也非常方便.在 < ...

  4. 跨平台的游戏客户端Socket封装,调整

    原文链接:http://www.cnblogs.com/lancidie/archive/2013/04/13/3019359.html 头文件: #pragma once #ifdef WIN32 ...

  5. RecyclerView再封装

    RecyclerView做为ListView的替代品,已经出了很久了,既然是替代品,那自然有些ListView没有的优点.比如说:可以随意切换list,grid,stagger.可以指定一个或多个it ...

  6. c# AutoMapper 使用方式和再封装

    安装方式:使用vs自带的nuget管理工具,搜索AutoMapper ,选择第一个安装到你的项目即可. 我从网上找了一些资料, 参考网址:http://blog.csdn.net/csethcrm/a ...

  7. 新浪微博客户端(3)-封装UIBarButtonItem

    单独给NavigationBar上的两个NavigationItem设置图片显得比较麻烦,下面对创建单个UIBarButtonItem的过程进行封装. UIBarButtonItem+Extensio ...

  8. mvc中使用Pagination,对其进行再封装

    对其进行再次封装: (function($) { $["fn"]["easyPaging"] = function(o) { if (!o.pageSelect ...

  9. select客户端模型封装——回调方式快速建立客户端

    SockClient.h #pragma once #include<functional> #define _WINDOWS #ifdef _WINDOWS #define _WINSO ...

随机推荐

  1. 【转】如何在html与delphi间交互代码

    [转]如何在html与delphi间交互代码 (2015-11-19 22:16:24) 转载▼ 标签: it 分类: uniGUI uniGUI总群中台中cmj朋友为我们总结了如下内容,对于利用de ...

  2. 大话设计模式--访问者模式 Visitor -- C++实现实例

    1. 访问者模式: 表示一个作用于某对象结构中的和元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 访问者模式把数据结构和作用于结构上的操作之间的耦合脱开,使得操作集合可以 ...

  3. vue-cli3 set vue.config.js

    //config目录下index.js配置文件// see http://vuejs-templates.github.io/webpack for documentation.// path是nod ...

  4. java 多线程踩过的坑

    多线程踩坑记录:1.多线程切记不可以同时操作同一个原子数据.解释:存在一个条数据库A数据,不可以在2个或2个以上的线程中同时操作A数据.会引发重复操作.2.多线程操作方法不要加synchronized ...

  5. Oracle视图的使用

    --视图的语法 create [ or replace ] [NO Force | Force] View schema.view_name--视图名称 [(alias,...)inline_cons ...

  6. Codeforces 897C Nephren gives a riddle:模拟【珂学】

    题目链接:http://codeforces.com/contest/897/problem/C 题意: 给你一些字符串: A: [What are you doing at the end of t ...

  7. 七 Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化

    F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from django.db.models import F from django.shortcuts import rende ...

  8. C. Jury Marks

    C. Jury Marks time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  9. centos 静态拨号

    本人系统centos6.5:虚拟机太丑,固ssh. centos的与联网相关的配置文件在 $ /etc/sysconfig/network-scripts DHCP方式-联网 打开文件 $ vim / ...

  10. C语言逗号运算符和逗号表达式

    在C语言中逗号","也是一种运算符,称为逗号运算符. 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式.其一般形式为:表达式1,表达式2 其求值过程是分别求两个表达式的 ...