HttpClient和HttpURLConnection的使用和区别
Posted genggeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpClient和HttpURLConnection的使用和区别相关的知识,希望对你有一定的参考价值。
https://www.cnblogs.com/liushuibufu/p/4140913.html
-
功能用法对比
-
从功能上对比,HttpURLConnection比HttpClient库要丰富很多,提供了很多工具,封装了http的请求头,参数,内容体,响应,还有一些高级功能,代理、COOKIE、鉴权、压缩、连接池的处理。
-
HttpClient高级功能代码写起来比较复杂,对开发人员的要求会高一些,而HttpURLConnection对大部分工作进行了包装,屏蔽了不需要的细节,适合开发人员直接调用。
-
另外,HttpURLConnection在2.3版本增加了一些HTTPS方面的改进,4.0版本增加一些响应的缓存。
-
-
性能对比
-
HttpUrlConnection直接支持GZIP压缩;HttpClient也支持,但要自己写代码处理。
-
HttpUrlConnection直接支持系统级连接池,即打开的连接不会直接关闭,在一段时间内所有程序可共用;HttpClient当然也能做到,但毕竟不如官方直接系统底层支持好。
-
HttpUrlConnection直接在系统层面做了缓存策略处理(4.0版本以上),加快了重复请求的速度。
-
这篇文章对两者的速度做了一个对比,做法是两个类都使用默认的方法去请求百度的网页内容,测试结果是使用httpurlconnection耗时47ms,使用httpclient耗时641ms。httpURLConnection在速度有比较明显的优势,当然这跟压缩内容和缓存都有直接关系。
-
-
未来发展
-
HttpClient 适用于 web browsers, 他们是可扩展的,并且拥有大量的稳定APIs。但是,在不破坏其兼容性的前提下很难对如此多的APIs做修改。因此,android 团队对修改优化Apache HTTP Client表现的并不积极。
-
HttpURLConnect 是一个通用的、适合大多数应用的轻量级组件。这个类起步比较晚,很容易在主要API上做稳步的改善。但是HttpURLConnection在在Android 2.2及以下版本上存在一些令人厌烦的bug,尤其是在读取 InputStream时调用 close()方法,就有可能会导致连接池失效了。
-
Android团队未来的工作会将更多的时间放在优化HttpURLConnection上,它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。
-
-
选用建议
-
如果一个Android应用需要向指定页面发送请求,但该页面并不是一个简单的页面,只有当用户已经登录,而且登录用户的用户名有效时才可访问该页面。如果使用HttpURLConnection来访问这个被保护的页面,那么需要处理的细节就太复杂了。这种情况建议使用HttpClient。
-
Android2.3及以上版本建议选用HttpURLConnection,2.2及以下版本建议选用HttpClient。新的应用都建议使用HttpURLConnection。
-
以上是关于HttpClient和HttpURLConnection的使用和区别的主要内容,如果未能解决你的问题,请参考以下文章
Android回顾系列——之HttpUrlConnect的使用
如何使用 HttpUrlConnect 使用 java 查询 Github graphql API
Android探索之HttpURLConnection网络请求