轉載請以鏈接形式標明出處:
本文出自:103style的博客
base on 3.12.0
簡介
OkHttpClient
是通過 builder
模式來爲http
請求設置相關配置。
創建單個
OkHttpClient
實例並將其用於所有HTTP
調用時,OkHttp
的性能最佳。
這是因爲每個OkHttpClient
都擁有自己的連接池和線程池。 重用連接和線程可減少延遲並節省內存。 相反,爲每個請求創建一個OkHttpClient
會浪費空閒池上的資源。
當需要多個OkHttpClient
時,我們可以使用newBuilder()
自定義共享的OkHttpClient
實例。 這將構建共享相同連接池,線程池和配置。
OkHttpClient 相關的配置方法
默認配置
public Builder() {
dispatcher = new Dispatcher();
protocols = DEFAULT_PROTOCOLS;
connectionSpecs = DEFAULT_CONNECTION_SPECS;
eventListenerFactory = EventListener.factory(EventListener.NONE);
proxySelector = ProxySelector.getDefault();
if (proxySelector == null) {
proxySelector = new NullProxySelector();
}
cookieJar = CookieJar.NO_COOKIES;
socketFactory = SocketFactory.getDefault();
hostnameVerifier = OkHostnameVerifier.INSTANCE;
certificatePinner = CertificatePinner.DEFAULT;
proxyAuthenticator = Authenticator.NONE;
authenticator = Authenticator.NONE;
connectionPool = new ConnectionPool();
dns = Dns.SYSTEM;
followSslRedirects = true;
followRedirects = true;
retryOnConnectionFailure = true;
callTimeout = 0;
connectTimeout = 10_000;
readTimeout = 10_000;
writeTimeout = 10_000;
pingInterval = 0;
}
超時相關的方法
- 設置
call
完成的超時時間 默認值爲0
表示無超時時間。callTimeout(long timeout, TimeUnit unit)
callTimeout(Duration duration)
- 設置
RealConnection
的 連接 超時時間,默認值爲10s
.connectTimeout(long timeout, TimeUnit unit)
connectTimeout(Duration duration)
- 設置
RealConnection
的 讀取 超時時間,默認值爲10s
.readTimeout(long timeout, TimeUnit unit)
readTimeout(Duration duration)
- 設置
RealConnection
的 寫入 超時時間,默認值爲10s
.writeTimeout(long timeout, TimeUnit unit)
writeTimeout(Duration duration)
- 設置
HTTP/2
和web socket
ping
之間的間隔。默認0
表示客戶端禁用客戶端啓動的ping
.pingInterval(long interval, TimeUnit unit)
pingInterval(Duration duration)
配置Http連接的代理
proxy
優先與 proxySelector
.
-
proxy(@Nullable Proxy proxy)
禁用代理可使用Proxy.NO_PROXY
. -
proxySelector(ProxySelector proxySelector)
設置未指定proxy
時的代理策略
設置執行異步請求的策略
dispatcher(Dispatcher dispatcher)
添加和獲取可修改的攔截器
-
interceptors()
獲取可修改的攔截器列表 -
addInterceptor(Interceptor interceptor)
添加自定義攔截器 -
networkInterceptors()
返回可觀察到單個網絡請求和響應的攔截器的可修改列表。這些攔截器必須只調用一次。 -
addNetworkInterceptor(Interceptor interceptor)
添加網絡攔截器
事件響應回調監聽
-
eventListener(EventListener eventListener)
-
eventListenerFactory(EventListener.Factory eventListenerFactory)
監聽請求相關的回調,如下圖:
重定向
followSslRedirects(boolean followProtocolRedirects)
followRedirects(boolean followRedirects)
是否可以重定向,默認可以。
socket相關
socketFactory(SocketFactory socketFactory)
sslSocketFactory(SSLSocketFactory sslSocketFactory)
sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager)
設置相關的socket工廠。
證書認證相關
hostnameVerifier(HostnameVerifier hostnameVerifier)
設置用於確認響應證書是否適用於HTTPS
連接的請求主機名。certificatePinner(CertificatePinner certificatePinner)
設置證書固定器,以限制受信任的證書。authenticator(Authenticator authenticator)
設置用於響應原始服務器質詢的身份驗證器proxyAuthenticator(Authenticator proxyAuthenticator)
設置用於響應代理服務器質詢的身份驗證器
其他
retryOnConnectionFailure(boolean retryOnConnectionFailure)
配置客戶端連接出現問題時,是否重連。默認重連。cookieJar(CookieJar cookieJar)
設置可以接受來自傳入HTTP
響應的cookie
的處理程序,並提供cookie
傳出HTTP請求。cache(@Nullable Cache cache)
設置響應緩存以用於讀取和寫入緩存的響應。dns(Dns dns)
設置用於查找主機名IP
地址的DNS
服務。connectionPool(ConnectionPool connectionPool)
設置HTTP
、HTTPS
連接的連接池。protocols(List<Protocol> protocols)
配置此客戶端用於與遠程服務器通信的協議
以上