文章目录
OkHttp 系列文章目录
一、OkHttpClient.Builder 各个字段作用
二、OkHttpClient.Builder 涉及到的相关源码
三、博客资源
一、OkHttpClient.Builder 各个字段作用
在使用 OkHttpClient 都要进行初始化 , 初始化代码如下 :
OkHttpClient mOkHttpClient = new OkHttpClient();
初始化方法中, 创建了 OkHttpClient.Builder 对象 , 该类也是使用创建者模式实例化对象 ;
public OkHttpClient() { this(new Builder()); }
分析 OkHttpClient.Builder 创建者中可以设置的成员 :
调度器 : 处理 Get / Post 请求线程的调度 ;
Dispatcher dispatcher;
代理 : 3 种代理模式 , ① 直连模式 , ② HTTP 代理 , ③ SOCKS 代理 ;
@Nullable Proxy proxy;
协议集合 : 使用的协议版本 , 如 “http/1.1” , “http/2” , “spdy/3.1” 等 ;
List<Protocol> protocols;
连接池 : 配置 Socket 连接 , HTTPS 中的 TLS ( 配置安全传输层协议 ) 版本 和 密码套件 ;
List<ConnectionSpec> connectionSpecs;
拦截器 : 监听 , 重写 , 重试 请求 ; 通过链式调用 , 执行拦截器相关任务 ;
final List<Interceptor> interceptors = new ArrayList<>(); final List<Interceptor> networkInterceptors = new ArrayList<>();
代理选择器 : 默认不启用代理 , 直连方式 , 可以通过该字段自定义指定代理方式 ;
ProxySelector proxySelector;
Cookie 存储 : 保存 Cookie ;
CookieJar cookieJar;
缓存对象 : 内部使用 DiskLruCache 进行缓存 , 根据 url , 请求方法 , 请求头 , 验证是否使用某个缓存 ; ( 只支持 Get 请求的缓存响应方式 )
@Nullable Cache cache;
内置缓存对象 :
@Nullable InternalCache internalCache;
Socket 工厂 : 用于创建 Socket ;
SocketFactory socketFactory;
安全套接字工厂 : 使用 HTTPS 协议时 , 创建 SSLSocket ; 涉及到 HTTPS 证书信任问题 , 如果证书不收信任 , 会报异常 ;
@Nullable SSLSocketFactory sslSocketFactory;
证书链清洁器 : 使用 HTTPS 协议时 , 使用 Java TSL 相关 API , 获取有效证书 , 清除不相关证书 ;
@Nullable CertificateChainCleaner certificateChainCleaner;
主机名称校验器 : 使用 HTTPS 协议时 , 如果无法识别 URL 中的主机名称 , 就要进行主机验证 ;
HostnameVerifier hostnameVerifier;
证书锁 : 使用 HTTPS 协议时 , 约束可以信任的证书 , 防止不受信任的证书的攻击行为 , 如果没有受信任的证书 , 报异常 ;
CertificatePinner certificatePinner;
身份认证器 : 如果连接提示未授权 , 重新设置请求头响应新的请求 ;
Authenticator proxyAuthenticator; Authenticator authenticator;
连接池 : 1 11 个客户端与 1 11 个服务器之间的连接是 1 11 个 Connection 连接 ; 这些连接都放在该连接池中 , 统一管理 ; 如果有相同的 HTTP 请求 , 则可以使用连接池中的连接 ;
ConnectionPool connectionPool;
域名 : 用于域名解析 ;
Dns dns;
是否进行 SSL 重定向 :
boolean followSslRedirects;
是否进行普通重定向 :
boolean followRedirects;
失败后是否重连 :
boolean retryOnConnectionFailure;
回调超时时间 :
int callTimeout;
连接超时时间 :
int connectTimeout;
读取超时时间 :
int readTimeout;
写出超时时间 :
int writeTimeout;
Ping 间隔时间 : 保持长链接 , 周期性执行 Ping 命令 , 该值就是周期时间 ;
int pingInterval;
二、OkHttpClient.Builder 涉及到的相关源码
OkHttpClient 相关代码如下 :
public class OkHttpClient implements Cloneable, Call.Factory, WebSocket.Factory { public OkHttpClient() { this(new Builder()); } public static final class Builder { Dispatcher dispatcher; @Nullable Proxy proxy; List<Protocol> protocols; List<ConnectionSpec> connectionSpecs; final List<Interceptor> interceptors = new ArrayList<>(); final List<Interceptor> networkInterceptors = new ArrayList<>(); EventListener.Factory eventListenerFactory; ProxySelector proxySelector; CookieJar cookieJar; @Nullable Cache cache; @Nullable InternalCache internalCache; SocketFactory socketFactory; @Nullable SSLSocketFactory sslSocketFactory; @Nullable CertificateChainCleaner certificateChainCleaner; HostnameVerifier hostnameVerifier; CertificatePinner certificatePinner; Authenticator proxyAuthenticator; Authenticator authenticator; ConnectionPool connectionPool; Dns dns; boolean followSslRedirects; boolean followRedirects; boolean retryOnConnectionFailure; int callTimeout; int connectTimeout; int readTimeout; int writeTimeout; int pingInterval; } }