一个简单的请求过程:
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(“https://www.baidu.com/“).build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
OwnLog.i(response.body().string());
}
会执行RealCall里面的execute,然后执行getResponseWithInterceptorChain方法->ApplicationInterceptorChain中的proceed方法。
getResponse->engine = new HttpEngine->engine.sendRequest()->engine.readResponse();在这个过程中返回数据。
说明:Okhttp底层是通过Socket来实现连接的。代码分辨在Http1xStream、Http2xStream、HttpEngine里面。这下面3个类以及相关类,是核心的请求网络数据的代码
ConnectionPool连接池的分析:http://www.jianshu.com/p/92a61357164b
CacheStrategy缓存策略:http://www.jianshu.com/p/9cebbbd0eeab
优点
1.支持http、https请求
2.复用连接池,减少连接次数(https使用不?) //TODO
3.GZIP压缩 //具体的代码 //TODO
4.缓存策略避免重复请求
5.支持多个ip地址请求
Address
http请求的地址信息,包含一些SSl、证书等。
Authenticator
验证,认证。
Cache
缓存,采用DiskLruCache的方式进行缓存。
CacheControl
缓存策略
CacheStrategy
缓存策略
Call
请求封装接口类
Callback
请求失败、成功的回调
CertificatePinner
证书鉴定?
Challenge
RE:RFC 2617 challenge
CipherSuite
加密套接字
Connection
连接http、https的接口封装类
ConnectionPool
管理服用http连接
ConnectionSpec连接配置
ConnectionSpecSelector
连接配置策略
Cookie
CookieJar
策略
Credentials
资格证书
DiskLruCache
缓存管理
Dispatcher
异步执行策略
DistinguishedNameParser
名称解析。。
Dns
解析域名,有的应用会用自己的解析DNS
ErrorCode
错误码
FileSystem
文件系统
FormBody
请求body