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的使用和区别的主要内容,如果未能解决你的问题,请参考以下文章

HttpUrlConnect post提交

Android回顾系列——之HttpUrlConnect的使用

如何使用 HttpUrlConnect 使用 java 查询 Github graphql API

Android探索之HttpURLConnection网络请求

论httpclient上传带参数commons-httpclient和apache httpclient区别

android和httpClient