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

androd 网络请求方式对比与详解

2016-03-10 12:04 357 查看

转载请标明出处: 
http://blog.csdn.net/tangpengtp/article/details/50845150;

本文出自:【少年天蝎的博客】

Android中网络请求一般使用ApacheHTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,网上也有各种框架,现在整理出来,方便对比与学习。

1:OKhttp

概述:尽管Google在大部分安卓版本中推荐使用HttpURLConnection,但是这个类相比HttpClient实在是太难用,太弱爆了。OkHttp是一个相对成熟的解决方案,据说Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。所以我们更有理由相信OkHttp的强大。当你的网络出现拥挤的时候,就是OKHttp
大显身手的时候,

特点:

1. HTTP/2 和SPDY 支持允许所有到同一个host的请求共享一个socket。

2.连接池减少请求延时(如果SPDY 不可用).(SPDY(读作“SPeeDY”)是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强)

3.透明的GZIP(GNU自由软件的文件压缩程序,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。)支持,减少下载大小。

4.缓存Response以减少网络去做完全重复的请求。

5.- 如果你的服务有多个IP地址对应,OkHttp会在首次连接失败的时候尝试其他地址。  OkHttp使用现代的TLSfeatures (SNI, ALPN) 来初始化连接,并在握手失败的时候倒回到TLS1.0。

6. OkHttp 2.0的API设计为流式builders和immutability,同时支持同步blocking call和异步带callback的call

7你可以不用重写网络层代码来试试OkHttp。okhttp-urlconnection模块实现了大家熟悉的java.net.HttpURLConnectionAPI,而okhttp-apache模块实现了ApacheHttpClient API

8.OkHttp还用了Okio来做快速I/O和可调整大小的buffer。

9.okhttp可以通过chrome的开发工具来查看手机的网络访问情况,就和web开发人员一样可以在浏览器中查看手机访问网络的实时信息,查看提交和返回结果,大大的方便了开发

10.  OkHttp 自身是支持 Https 的. 参考文档 OkHttpHttps,直接使用上面的 OkHttpStack 就可以了, 但是如果遇到服务器开发哥哥使用了自签名的证书(不要问我为什么要用自签名的), 就无法正常访问了.

参考文件:http://blog.csdn.net/lmj623565791/article/details/47911083

参考文件:http://blog.csdn.net/lmj623565791/article/details/49734867

 

2.HttpClient

概述:HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache
Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。

特点:

1. 基于标准、纯净的java语言。实现了Http1.0和Http1.1

2. 以可扩展的面向对象的结构实现了Http全部的方法(GET, POST,PUT, DELETE, HEAD, OPTIONS, and TRACE)。

3. 支持HTTPS协议。

4. 通过Http代理建立透明的连接。

5. 利用CONNECT方法通过Http代理建立隧道的https连接。

6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session,SNPNEGO/Kerberos认证方案。

7. 插件式的自定义认证方案。

8. 便携可靠的套接字工厂使它更容易的使用第三方解决方案。

9. 连接管理器支持多线程应用。支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。

10. 自动处理Set-Cookie中的Cookie。

11. 插件式的自定义Cookie策略。

12. Request的输出流可以避免流中内容直接缓冲到socket服务器。

13. Response的输入流可以有效的从socket服务器直接读取相应内容。

14. 在http1.0和http1.1中利用KeepAlive保持持久连接。

15. 直接获取服务器发送的responsecode和 headers。

16. 设置连接超时的能力。

17. 实验性的支持http1.1responsecaching。

18. 源代码基于ApacheLicense可免费获取。

参考文件:http://blog.csdn.net/wangpeng047/article/details/19624529

3.asynchttpclient 

概述:android-async-http框架是一个开源的Android异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法处理请求结果,可以轻松的获取网络数据或者向服务器发送数据,使用起来非常简单。 

特点:

(1)采用异步http请求,并通过匿名内部类处理回调结果

(2)http请求独立在UI主线程之外

(3)采用线程池来处理并发请求

(4)采用RequestParams类创建GET/POST参数

(5)不需要第三方包即可支持Multipart file文件上传

(6)大小只有25kb

(7)自动为各种移动电话处理连接断开时请求重连

(8)超快的自动gzip响应解码支持

(9)使用BinaryHttpResponseHandler类下载二进制文件(如图片)

(10) 使用JsonHttpResponseHandler类可以自动将响应结果解析为json格式

(11)持久化cookie存储,可以将cookie保存到你的应用程序的SharedPreferences中PersistentCookieStore类用于实现ApacheHttpClient的CookieStore接口,可以自动的将cookie保存到Android设备的SharedPreferences中,如果你打算使用cookie来管理验证会话,这个非常有用,因为用户可以保持登录状态,不管关闭还是重新打开你的app

参考文件:http://blog.csdn.net/yanbober/article/details/45307549

4.volley 

概述:Volley。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

特点:(1)默认Android2.3及以上基于HttpURLConnection,2.3以下使用基于HttpClient; 
(2)符合Http 缓存语义 的缓存机制(提供了默认的磁盘和内存等缓存);
(3)请求队列的优先级排序;
(4)提供多样的取消机制;
(5)提供简便的图片加载工具(其实图片的加载才是我们最为看重的功能),mageLoader更加强大的网络图片请求 
参考文件:http://blog.csdn.net/guolin_blog/article/details/17482095

5.HttpRequest

对于小项目,这种网络框架简直就是一种幸福的选择。稍微大一点的项目就不推荐了

这里简单的说下https与http的区别:

HTTPS相当于HTTP的安全版本了,为什么安全呢?

因为它在HTTP的之下加入了SSL(Secure Socket Layer),安全的基础就靠这个SSL了。SSL位于TCP/IP和HTTP协议之间,那么它到底能干嘛呢?

它能够:

1. 认证用户和服务器,确保数据发送到正确的客户机和服务器;(验证证书)

2. 加密数据以防止数据中途被窃取;(加密)

3..维护数据的完整性,确保数据在传输过程中不被改变。(摘要算法)

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息