前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【OkHttp】OkHttp 源码分析 ( OkHttpClient.Builder 构造器源码分析 )

【OkHttp】OkHttp 源码分析 ( OkHttpClient.Builder 构造器源码分析 )

作者头像
韩曙亮
发布2023-03-29 14:22:09
7520
发布2023-03-29 14:22:09
举报

OkHttp 系列文章目录

【OkHttp】OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 )

【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置 networkSecurityConfig | 配置 ViewBinding | 代码示例 )

【OkHttp】OkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )

【OkHttp】OkHttp 上传图片 ( 获取 SD 卡动态权限 | 跳转到相册界面选择图片 | 使用 OkHttp 上传图片文件 )

【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )

【OkHttp】OkHttp 源码分析 ( OkHttpClient.Builder 构造器源码分析 )


文章目录

一、OkHttpClient.Builder 各个字段作用


在使用 OkHttpClient 都要进行初始化 , 初始化代码如下 :

代码语言:javascript
复制
OkHttpClient mOkHttpClient = new OkHttpClient();

初始化方法中, 创建了 OkHttpClient.Builder 对象 , 该类也是使用创建者模式实例化对象 ;

代码语言:javascript
复制
  public OkHttpClient() {
    this(new Builder());
  }

分析 OkHttpClient.Builder 创建者中可以设置的成员 :

调度器 : 处理 Get / Post 请求线程的调度 ;

代码语言:javascript
复制
Dispatcher dispatcher;

代理 : 3 种代理模式 , ① 直连模式 , ② HTTP 代理 , ③ SOCKS 代理 ;

代码语言:javascript
复制
@Nullable Proxy proxy;

协议集合 : 使用的协议版本 , 如 “http/1.1” , “http/2” , “spdy/3.1” 等 ;

代码语言:javascript
复制
List<Protocol> protocols;

连接池 : 配置 Socket 连接 , HTTPS 中的 TLS ( 配置安全传输层协议 ) 版本 和 密码套件 ;

代码语言:javascript
复制
List<ConnectionSpec> connectionSpecs;

拦截器 : 监听 , 重写 , 重试 请求 ; 通过链式调用 , 执行拦截器相关任务 ;

代码语言:javascript
复制
final List<Interceptor> interceptors = new ArrayList<>();
final List<Interceptor> networkInterceptors = new ArrayList<>();

代理选择器 : 默认不启用代理 , 直连方式 , 可以通过该字段自定义指定代理方式 ;

代码语言:javascript
复制
ProxySelector proxySelector;

Cookie 存储 : 保存 Cookie ;

代码语言:javascript
复制
CookieJar cookieJar;

缓存对象 : 内部使用 DiskLruCache 进行缓存 , 根据 url , 请求方法 , 请求头 , 验证是否使用某个缓存 ; ( 只支持 Get 请求的缓存响应方式 )

代码语言:javascript
复制
@Nullable Cache cache;

内置缓存对象 :

代码语言:javascript
复制
@Nullable InternalCache internalCache;

Socket 工厂 : 用于创建 Socket ;

代码语言:javascript
复制
SocketFactory socketFactory;

安全套接字工厂 : 使用 HTTPS 协议时 , 创建 SSLSocket ; 涉及到 HTTPS 证书信任问题 , 如果证书不收信任 , 会报异常 ;

代码语言:javascript
复制
@Nullable SSLSocketFactory sslSocketFactory;

证书链清洁器 : 使用 HTTPS 协议时 , 使用 Java TSL 相关 API , 获取有效证书 , 清除不相关证书 ;

代码语言:javascript
复制
@Nullable CertificateChainCleaner certificateChainCleaner;

主机名称校验器 : 使用 HTTPS 协议时 , 如果无法识别 URL 中的主机名称 , 就要进行主机验证 ;

代码语言:javascript
复制
HostnameVerifier hostnameVerifier;

证书锁 : 使用 HTTPS 协议时 , 约束可以信任的证书 , 防止不受信任的证书的攻击行为 , 如果没有受信任的证书 , 报异常 ;

代码语言:javascript
复制
CertificatePinner certificatePinner;

身份认证器 : 如果连接提示未授权 , 重新设置请求头响应新的请求 ;

代码语言:javascript
复制
Authenticator proxyAuthenticator;
Authenticator authenticator;

连接池 :

1

个客户端与

1

个服务器之间的连接是

1

个 Connection 连接 ; 这些连接都放在该连接池中 , 统一管理 ; 如果有相同的 HTTP 请求 , 则可以使用连接池中的连接 ;

代码语言:javascript
复制
ConnectionPool connectionPool;

域名 : 用于域名解析 ;

代码语言:javascript
复制
Dns dns;

是否进行 SSL 重定向 :

代码语言:javascript
复制
boolean followSslRedirects;

是否进行普通重定向 :

代码语言:javascript
复制
boolean followRedirects;

失败后是否重连 :

代码语言:javascript
复制
boolean retryOnConnectionFailure;

回调超时时间 :

代码语言:javascript
复制
int callTimeout;

连接超时时间 :

代码语言:javascript
复制
int connectTimeout;

读取超时时间 :

代码语言:javascript
复制
int readTimeout;

写出超时时间 :

代码语言:javascript
复制
int writeTimeout;

Ping 间隔时间 : 保持长链接 , 周期性执行 Ping 命令 , 该值就是周期时间 ;

代码语言:javascript
复制
int pingInterval;

二、OkHttpClient.Builder 涉及到的相关源码


OkHttpClient 相关代码如下 :

代码语言:javascript
复制
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;
  }
}

三、博客资源


GitHub : https://github.com/han1202012/OkHttp

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • OkHttp 系列文章目录
    • 文章目录
    • 一、OkHttpClient.Builder 各个字段作用
    • 二、OkHttpClient.Builder 涉及到的相关源码
    • 三、博客资源
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档