okhttp之OkHttpClient

轉載請以鏈接形式標明出處:
本文出自: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/2web 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)

    監聽請求相關的回調,如下圖:
    event

重定向
  • 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)
    設置 HTTPHTTPS 連接的連接池。
  • protocols(List<Protocol> protocols)
    配置此客戶端用於與遠程服務器通信的協議

以上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章