okhttp——1.基本使用及概要

okhttp基本使用及概要

github地址
官網地址

特性:

  1. socket複用 (同一個主機共享一個socket)
  2. 結果緩存減少重複請求
  3. 支持透明的gzip壓縮

http/https協議棧

創建client

OkHttpClient httpsClient = new OkHttpClient.Builder()
                    .protocols(Collections.singletonList(Protocol.HTTP_1_1))
                    .connectTimeout(timeOut, TimeUnit.MILLISECONDS)
                    .readTimeout(timeOut, TimeUnit.MILLISECONDS)
                    .build();

上面爲基本的okhttp的創建方式,當然還有很多其它的高級點的設置,下面介紹幾個:

// 業務可以自己實現dns接口,okhttp內部有默認實現,無超時邏輯,可能出現dns解析幾十秒的問題(dns爲樹形結構如果查詢不到則會逐級查詢直到根域名服務器,整個過程非常耗時。出現過一個bug當解析ip+端口號的錯誤域名時耗時可以達幾十秒級別)
// 所以建議自己實現dns接口,設置一個超時時間
public Builder dns(Dns dns)
// 域名校驗接口(只有https需要設置,在ssl握手階段,如果url域名與服務器的域名不匹配時,會交給HostnameVerifier接口判斷是否進行連接)
public Builder hostnameVerifier(HostnameVerifier hostnameVerifier)
// 可以設置SocketFactory,用於創建Socket
public Builder socketFactory(SocketFactory socketFactory)

// 對於https的連接創建Factory可以用如下方法
public Builder sslSocketFactory(SSLSocketFactory sslSocketFactory)
// 是否支持重定向,默認爲支持
Builder followRedirects(boolean followRedirects)
// 連接失敗後是否重連: 默認在 特定場景下回重連(如一個host有多個ip,一個ip失敗會嘗試另一個)
public Builder retryOnConnectionFailure(boolean retryOnConnectionFailure)
// 添加網絡攔截器
Builder addNetworkInterceptor(Interceptor interceptor)

// 請求攔截器
Builder addInterceptor(Interceptor interceptor)
// 用於監控請求的每個階段,可以做 端到端監控,監控每個接口統計耗時
Builder eventListener(EventListener eventListener)

除以上接口外還可以設置 Dispatch(線程管理)、代理、自定義連接池等,功能很強大

構造請求

請求構造比較簡單,具體可參考如下:

Request request = new Request.Builder()
                    .url(url)
                    .post(data)
                    .headers(Headers.of(headerParams))
                    .build();

同步請求

Response response = client.newCall(request).execute()

異步請求

Response response = client.newCall(request).enqueue(Callback responseCallback)

請求流程


)

// https 中ssl過程
SSLSocketFactory

參考:
https://www.jianshu.com/p/9deec36f2759

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