-
HttpUrlConnection
与
Htt
pClient
详解
一.
概念。
在
Android
开发中,
AndroidSDK
中对
HTTP
提供了很好的支持,
主要包括两种接口。
1.
一个是
Sun
公司提供的库,基于标准
Java
接口的
HttpURLConnection
,这个类封装的
很少,如果使用高级功
能,如重访问
/Cookie/Sess
ion
等就相当不方便。它可以实现
简单的基于
URL
的请求与相应功能。
Google
在
Android
Api23
及以后的版本中推荐使用
HttpURLConnention
,在后
续版本中逐渐对其进行优化完善。在
2.2
版本以前,一直存
在着一些
bug
。
比如对一个可读的
In
putStream
调用
close
方
法时,可能会导致连接池失效。通常我们会禁用连接池功
能。
2.
另一个是
Apache
公司提供的的
HttpClient
,
它提供了高效的,
最新的功能丰富的
api
,支持
Http
协
议工具包,
支持
HTTP
最新版本和建
议,
是个很好的开源框架,
封装了
ht
tp
的请求,
参数,内容体,响应等,拥有众多
API
,但同时
HttpClient
的
API
数量太多,如果不破坏兼容性的情况下想对他
进行扩
展很麻烦。在
API 23 SDK
将其去掉了。建议使用
HttpURLConnection
。
以上两种联网方式都支持
HTT
PS
协议、
以流的形式进行传输、
IP
v6
、配置超时时间、以及连接池等功能。
二.
区别。
1.
功
能上,
HttpClient
库要丰富很多,提供了很多工具,封装了
http
的请求头,
参数,
内容体,
响应,
还有一些高级功能,
代理、
COOKI
E
、
鉴权、压缩、连接池的处理。
2.
H
tt
pClient
高级功能代码写起来比较复杂,
对开发人员的要
求会高
一些,而
HttpURLConnection
对大部分工作进行了包装,屏蔽了
不需要的细节,适合开发人员直接调用
。
3.
H
ttpURLConnection
在
2.3
< br>版本增加了一些
HTTPS
方面的改进,
4.0
版本增加一些响应的缓存。
4.
HttpUrlConnect
ion
直接支持
GZIP
压缩;
HttpClient
也支持,但
要自己写代
码处理。
5.
HttpUrlConnection
直接支持系统级连接池,即打开的连接不会直
接关闭,
在一段时间内所有程序可共用;
HttpClient
当然也能做到,
但毕竟不如官方直接系
统底层支持好。
6.
HttpUrlConnection
直接在系统层面做了缓存策略处理(<
/p>
4.0
版本
以上)
,加快了重复请求的速度。
7.
HttpClient
适用于
web browsers,
他们是可扩展的,并且拥有大<
/p>
量的稳定
APIs
。但是,在不破坏其兼
容性的前提下很难对如此多
的
APIs
做修改。因此,
Android
团队对修改优化
Apache HTTP
Client
表现的并不积极。
8.
HttpURLConnect
是一个通用的、
适合大多数应用的轻量级组件。
这
个类起步比较晚,很容易在主要
API
上做稳步的改善。但是
HttpURLConnection
在在
Android 2.2
及以下版本上存在一些令
人厌
烦的
bug
,尤其是在读取
InputStream
时调用
p>
close()
方法,就有可
能会导致连接
池失效了。
9.
< br>Android
团队未来的工作会将更多的时间放在优化
HttpURLConnection
上,
它的
API
简单,
体积较小,
因而
非常适用于
Android
项目。
压缩
和缓存机制可以有效地减少网络访问的流量,
在
提升速度和省电
方面也起到了较大的作用。
10.
如果一个
Android
应用需要向指
定页面发送请求,
但该页面并不
是一个简单的页面,只有当用户
已经登录,而且登录用户的用户名
有效时才可访问该页面。如果使用
HttpURLConnection
来访问这个
被保护的
页面,那么需要处理的细节就太复杂了。这种情况建议使
用
Ht
tpClient
。
11.
Android2.3
及以上版本建议选用
HttpURLConnection
,
2.2
及以
下版本建议
选用
HttpClient
。新的应用都建议使用
HttpURLConnection
。
三.
HttpClient
访问网络流程。
由于在
Android2.2
以后版本
中已经将
HttpClient
弃用,所以不
< br>在这里详细说明如何使用
HttpClient
进行网络
通信了,
下面说一