日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/6/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OkHttp】OkHttp 源码分析 ( OkHttpClient.Builder 构造器源码分析 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 構造器源碼分析 )


文章目錄

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

連接池 : 111 個客戶端與 111 個服務器之間的連接是 111 個 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;} }



三、博客資源



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

總結

以上是生活随笔為你收集整理的【OkHttp】OkHttp 源码分析 ( OkHttpClient.Builder 构造器源码分析 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。