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

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

文章目录

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;
  }
}



目录
打赏
0
0
0
0
39
分享
相关文章
OkHttp3源码详解(一) Request类
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680每一次网络请求都是一个Request,Request是对url,method,header,body的封装,也是对Http协议中请求行,请求头,实体内容的封装 p.
【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
366 0
【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
Okhttp3源码解析(1)-OkHttpClient分析
前言 上篇文章我们讲了Okhttp的基本用法,今天根据上节讲到请求流程来分析源码,那么第一步就是实例化OkHttpClient对象,所以我们今天主要分析下OkHttpClient源码! 初始化-构造方式 创建 OkHttpClient实例的两种方式 1.
2890 0
Retrofit + OkHttp + RxJava 简单实现
今天又有时间学学东西,写写博客了,虽然已经快2点了,还是没有一丝丝困倦之意,之前自己对mvp有了大概1% 的不全面的认识,今天大概有了5%的认识了,算是小小的进步,对于第一次接触mvp的同学请移步第一步 .
750 0
浅谈OkHttp以及Retrofit+RxJava的封装使用
1.为什么我们要使用OkHttp?OkHttp有什么优点?  说OkHttp之前我们先说另外两个网络请求库——HttpUrlConnection和HttpClient。
2233 0
OkHttp3源码详解(三) 拦截器
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/4743806801.构造Demo 首先构造一个简单的异步网络访问Demo: 1. OkHttpClient client = new OkHttpClient(); 2.
Retrofit--使用Retrofit时怎样去设置OKHttp
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/51388147 绪论: 之前我们分析了使用...
1118 0
|
7月前
retrofit+okhttp+rxjava
retrofit+okhttp+rxjava

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等