OkHtto完全解析(二)构建和调用
来源:互联网 发布:学服装设计的软件 编辑:程序博客网 时间:2024/06/05 10:06
要求基于Java 7构建和运行,运行时需兼容Java 6确保 Android平台和旧版本JVM的稳定性。
2.1 通过Maven进行桌面测试
通过Maven在桌面上运行OkHttp测试程序。使用Jetty-ALPN在桌面上运行HTTP/2和SPDY的测试程序。
mvn clean test
2.2 不使用Maven进行桌面测试
2.3 设备测试
1. 调用 Calls
HTTP客户端的工作是接受你的请求,并产生响应。这一点理论上很简单,但是实际上很棘手。
3.1 请求
每个HTTP请求包含一个URL,一个方法(GET或者POST),一个头列表。请求也可能包含一个请求体,或者一个特定类型的数据流。
3.2 响应
HTTP通过响应码202或者404响应请求,还包含头部和自身可选的响应体。
3.3 重写请求
当给OkHttp提供一个HTTP请求时,等于是给了OkHttp一个获取数据的命令。为了保证高效性和正确性,OkHttp会在发送之前重写你的请求。
OkHttp允许添加原始请求中不包含的头部,包括Content-Length, Transfer-Encoding,User-Agent,Host,Connection和Content-Type。也会在Accept-Encoding默认缺失的情况下,添加一个Accept-Encoding头部使响应压缩透明化。如果已经存在cookie,则OkHttp也会再添加Cookie头部。
有些请求可能存在缓存响应。当缓存响应没有更新时,如果缓存的内容有更新,则OkHttp可以执行一个条件性的GET操作下载一个更新响应。这个请求可能包含一个If-Modified-Since和If-None-Match头部。
[源码分析:4.1]
3.4 重写响应
如果使用透明化压缩,则OkHttp会放弃相应的响应头部Content-Type和 Content-Length,因为这两个头部不适用于非解压的响应头部。如果条件性GET请求成功,则来自网络和缓存的响应会根据规格直接合并。
3.5 增强请求
如果你请求的URL被移除,web服务器会返回一个类似302的响应码表明文档的新URL。OkHttp会跟进这个重定向的地址,并获取最终的响应。如果响应发出一个授权问题,OkHttp会询问认证者(如果有配置的话)是否满足授权要求。如果认证者提供了一个证书,那么请求会包含该证书进行重试。
3.6 重试请求
在下列情况下,连接会失败:线程池陈旧或者断开,web浏览器自身无法到达。这时,OkHttp会获取提供的不同线路进行重试。
3.7 调用
通过重写,重定向,请求增强和重试,你的简单请求可能产生很多个请求和响应。OkHttp使用call来模拟满足你请求的任务,不论需要多少个中间请求和响应。一般情况下不需要很多中间请求和响应,不过,在你的URLs不断重定向或者指向可选IP地址失败的时候,就会这样。
调用会以下列两种方式执行:
同步执行:线程阻塞,知道响应可读取。
异步进行:入队请求到任意一个线程,然后在另一个线程中,在响应可读取时获取回调。
可以从任意线程中取消调用。如果调用还没有完成,则取消操作会失败。如果正在写入请求体或者正在读取响应体,则取消操作会触发IOException。
3.8 分发
对于同步调用,你需要自己管理创建的同步请求。同步请求太多会浪费资源,太少会导致延迟。
对于异步调用,分发器会实现满足最大数量同步请求的代理。你也可以为每个web服务器设置最大值(默认是5个)或者为所有web服务器设置最大总和(默认是64个)。
- OkHtto完全解析(二)构建和调用
- OkHttp完全解析(二)
- Xutils完全解析(二):ViewUtils和BitmapUtils
- 调用摄像头和相册完全解析
- banner+Recyclerview+Gson+okhtto请求网络数据+解析
- Android属性动画完全解析(二)
- Java上传下载完全解析(二)
- Retrofit2完全解析(二)
- 解析调用接口内容和构建接口请求xml
- OkHttp完全解析(九)源码解析二
- Android Volley完全解析(二)
- ThinkPHP框架完全解析二
- Android Volley完全解析(二)
- Android:Service完全解析(二)
- Android Service完全解析(二)
- qjson解析和构建
- JSON 构建和解析
- Cookie应用完全解析(二):了解 SSL协议
- OkHttp完全解析(一)OkHttp简介
- UIGraphicsBeginImageContext系列知识
- java向上转型和向下转型
- Codeforces Round #333 (Div. 2)B. Approximating a Constant Range(ST+二分||set暴力)
- Mac 和 Windows 文件相互共享
- OkHtto完全解析(二)构建和调用
- 静态区和栈区和堆区
- Android使用Application总结
- 1016. 部分A+B (15)
- 实现UITableView上View的上拉隐藏下拉出现效果(2)
- 简单的java聊天程序
- How-Tos_A simple JAX-WS servicec创建项目
- 第13周、项目—验证算法 (5)
- UIView中的坐标转换