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,ConnectionContent-Type。也会在Accept-Encoding默认缺失的情况下,添加一个Accept-Encoding头部使响应压缩透明化。如果已经存在cookie,则OkHttp也会再添加Cookie头部。

有些请求可能存在缓存响应。当缓存响应没有更新时,如果缓存的内容有更新,则OkHttp可以执行一个条件性的GET操作下载一个更新响应。这个请求可能包含一个If-Modified-SinceIf-None-Match头部。

   [源码分析:4.1]

3.4 重写响应

如果使用透明化压缩,则OkHttp会放弃相应的响应头部Content-Type Content-Length,因为这两个头部不适用于非解压的响应头部。如果条件性GET请求成功,则来自网络和缓存的响应会根据规格直接合并。

3.5 增强请求

如果你请求的URL被移除,web服务器会返回一个类似302的响应码表明文档的新URLOkHttp会跟进这个重定向的地址,并获取最终的响应。如果响应发出一个授权问题,OkHttp会询问认证者(如果有配置的话)是否满足授权要求。如果认证者提供了一个证书,那么请求会包含该证书进行重试。

3.6 重试请求

在下列情况下,连接会失败:线程池陈旧或者断开,web浏览器自身无法到达。这时,OkHttp会获取提供的不同线路进行重试。

3.7 调用

通过重写,重定向,请求增强和重试,你的简单请求可能产生很多个请求和响应。OkHttp使用call来模拟满足你请求的任务,不论需要多少个中间请求和响应。一般情况下不需要很多中间请求和响应,不过,在你的URLs不断重定向或者指向可选IP地址失败的时候,就会这样。

调用会以下列两种方式执行:

     同步执行:线程阻塞,知道响应可读取。

     异步进行:入队请求到任意一个线程,然后在另一个线程中,在响应可读取时获取回调。

可以从任意线程中取消调用。如果调用还没有完成,则取消操作会失败。如果正在写入请求体或者正在读取响应体,则取消操作会触发IOException

3.8 分发

对于同步调用,你需要自己管理创建的同步请求。同步请求太多会浪费资源,太少会导致延迟。

对于异步调用,分发器会实现满足最大数量同步请求的代理。你也可以为每个web服务器设置最大值(默认是5个)或者为所有web服务器设置最大总和(默认是64个)。

 

 


0 0
原创粉丝点击