一、HttpClient与HttpURLConnection,URLConnection

  HttpURLConnection继承URLConnection,底层socket,最原始通信,使用 HttpURLConnection 发起 HTTP 请求最大的优点是不需要引入额外的依赖。但无法提供额外的功能,如cookie,登录,同时,也缺乏连接池管理、域名机械控制等特性支持。

       HttpClient是apache的一个项目,封装了很多底层细节。Apache HttpComponents HttpClient 的前身是 Apache Commons HttpClient, 但是 Apache Commons HttpClient 已经停止开发,如果你还在使用它,请切换到 Apache HttpComponents HttpClient 上来。HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,它不仅使客户端发送HTTP请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。

      JDK 自带的 HttpURLConnection 标准库; Apache HttpComponents HttpClient, 以及基于该库的 wrapper, 如 Unirest. 非基于 Apache HttpComponents HttpClient, 大量重写应用层代码的 HTTP client 组件库,典型代表是 OkHttp. HttpURLConnectio。

 

二、OKHttp  

  由于当前 Apache HttpComponents HttpClient 版本并不支持 HTTP/2, 而 HTTP/2 对于移动客户端而言,无论是从握手延迟、响应延迟,还是资源开销看都有相当吸引力。因此这就给了高层次封装且支持 HTTP/2 的 http client lib 足够的生存空间。其中最典型的要数OkHttp。

OkHttp 接口设计友好,支持 HTTP/2,并且在弱网和无网环境下有自动检测和恢复机制,因此,是当前 Android APP 开发中使用最广泛的 HTTP clilent lib 之一。

另一方面,OkHttp 提供的接口与 Java 9 中 HttpClint 接口比较类似 (严格讲,应该是 Java 9 借鉴了 OkHttp 等开源库的接口设计?),因此,对于喜欢减少依赖,钟情于原生标准库的开发者来说,在 Java 11 中,从 OkHttp 切换到标准库是相对容易的。因此,以 OkHttp 为代表的 http 库以后的使用场景可能会被蚕食一部分。

 

三、Unirest
  Unirest一款轻量级的HTTP客户端库。支持多种语言,通过Mashape构建和维护。是一个比较少见的类库,它是对httpclient4的一层封装,调用方式跟okhttp差不多。unirest从它的名字,可以看得出,专门为了rest服务调用而生的。它的一大特点是提供了,多种语言同样的调用语义。node/python/java/c#/ruby/oc这些常用语言都有名为unirest的库,调用语义都大同小异。另一大特点是直接集成了对json序列化和反序列化的支持,可以对json结果直接解析出对象或者是返回可操作的json对象。可以参考https://www.cnblogs.com/zhangshihai1232/articles/6062507.html

 

四、Volley
  Volley是google在2013 io大会上推出的网络通信框架,特别适合处理数据量小,通信频繁的网络操作。优点是内部封装了异步线程,可直接在主线程请求网络,并处理返回的结果。同时可以取消请求,容易扩展。缺点是:面对大数据量的请求,比如下载表现糟糕,不支持https。Volley的底层在针对android2.3以下系统使用httpclicent,在android2.3以上采用HttpUrlConnection请求网络。可以参考https://blog.csdn.net/guolin_blog/article/details/17482095

 

五、Xutils

 Xutils是前几年比较火得一个开源框架,Xutils包含了很多实用的工具类,支持大文件上传,且有更全面的http请求协议支持,拥有灵活的Orm,支持事件注解且不受代码混淆影响。Xutils刚问世的时候真是很多屌丝程序猿的福利啊,集成了这么多功能强大的模块,大家果然都爱不释手,但是随着Android版本的升级和人们开发软件思想的转变,Xutils也暴露出了很多问题,现在用Xutils的已经不是特别的多了,如果想使用的话,推荐使用比较新的Xutils3。主要用于android,可以参考https://blog.csdn.net/QPC908694753/article/details/77142124

 

 六、Retrofit 

  Retrofit 是一个用于 Android 和 Java 平台的类型安全的网络请求框架。Retrofit 通过将 API 抽象成 Java 接口而让我们连接到 REST web 服务变得很轻松。和OkHttp同样出自Square公司,Retrofit内部依赖于OkHttp,但是功能上做了更多的扩展,比如返回结果的转换功能,可以直接对返回数据进行处理。可以参考https://juejin.im/post/5c0fbcf6518825642650b875 及https://www.jianshu.com/p/d7f0d9101b32


参考

https://juejin.im/post/5bae03b25188255c5442b66f

https://www.cnblogs.com/sharpest/p/7831350.html

https://blog.csdn.net/langtop/article/details/77972855

https://blog.csdn.net/imlsz/article/details/57616083

https://blog.csdn.net/bigbigsman/article/details/90707669

posted on 2020-02-19 12:21  yuluoxingkong  阅读(2796)  评论(0编辑  收藏  举报