您的位置:首页 > 理论基础 > 计算机网络

HttpURLConnection和AndroidHttpClient

2015-10-30 08:49 666 查看
Android中主要提供了两种方式来进行HTTP操作,HttpURLConnection和AndroidHttpClient。

(一)HttpURLConnection

1、HttpURLConnection 是Sun公司提供的网络连接库,提供通用性、轻量级的网络连接,简单,但可扩展性强,基本的网络请求都满足,同时支持IPv6、代理、授权、Cookies等。

2、支持压缩功能,自动在请求头中加入Accept-Encoding: gzip,但在getContentLength()中获取到的是压缩后的数据长度,要获取实际长度需要读取整个流自己计算。
3、2.2之前存在连接池失效问题,如读取流失败或未完成,后面继续使用时会读取到脏数据。可以禁用连接池功能。 
private void disableConnectionReuseIfNecessary() {
// 这是一个2.2版本之前的bug
if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {
System.setProperty("http.keepAlive", "false");
}
}

4、android 开发团队对 HttpURLConnectioin 比较重视,2.3版本增加 https 的改进,以及一些压缩和会话的机制。如果连接失败,它会自动去尝试重新进行连接。
5、4.0增加 http cache 功能HttpResponseCache,满足基本的
http 缓存,跟一般的 http cache 原理一样需要服务器支持。
缓存原理简单介绍:
(1)缓存利用http 头的Cache-Control,判断是否失效,未失效或无网络直接读取上次缓存,缓存一般存放于磁盘中。
(2)利用 http 头的If-Modified-Since或If-None-Match,请求数据到服务器,服务器根据If-Modified-Since或If-None-Match的值判断是否数据失效,未失效返回304状态,失效返回新的数据。
在 android 网络连接框架Volley
中自己实现了一套类似的 http cache。
6、请求时自动在 http 头加入手机信息User-Agent。

(二)AndroidHttpClient

1、AndroidHttpClient是Apache公司提供的库,封装了http的请求,参数,内容体,响应等,拥有众多API,但是因封装过多较冗余,很难扩展的同时兼容,目前已很少更新,5.1中已经被弃用。

(三)对比

1、HttpURLConnectioin支持压缩(gzip)和缓存(4.0以后),AndroidHttpClient 不支持,分别用这两 api 请求百度地址抓取数据如下





可见压缩后速度和传输数据量都减少,提升了网络请求性能。
2、android 开发团队已经弃用AndroidHttpClient,建议2.3以前使用 AndroidHttpClient,2.3(含)以后使用HttpURLConnectioin,新项目直接使用HttpURLConnectioin。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: