Intro OKHttp defaults settings

Intro OKHttp defaults settings

這篇介紹OKHttp defaults settings。

初始預設用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
private OKHttpClient() {
try {

OkHttpClient.Builder client = new OkHttpClient.Builder();

// 對同一個網站最多保持多少的 keep-alive connection
client.connectionPool(new ConnectionPool(10, 6, TimeUnit.SECONDS));
client.connectTimeout(CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS);
client.readTimeout(SOCKET_HOLD_TIMEOUT, TimeUnit.MILLISECONDS);
client.writeTimeout(SOCKET_HOLD_TIMEOUT, TimeUnit.MILLISECONDS);

//retry機制由程式精準控制
client.retryOnConnectionFailure(false);

// 設定thread pool
Dispatcher dispatcher = new Dispatcher(service);

// 可以同時發起的連線數量
dispatcher.setMaxRequests(MAX_TOTAL);

// 對同一站點最大可以發起的連線數
dispatcher.setMaxRequestsPerHost(MAX_PER_ROUTE);

client.dispatcher(dispatcher);

// 接收所有SSL憑證,並省略驗證
client.sslSocketFactory(sslSocketFactory(), (X509TrustManager) trustAllCerts[0]);
client.hostnameVerifier(hostnameVerifier);

this.client = client.build();

} catch (Exception e) {
log.error(e.getMessage(), e);
}
}

接收所有SSL憑證,並省略驗證

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 預設忽略證書的驗證
private TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {

@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}

@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) {
}

@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
}};

/**
* 配置一個HostnameVerifier來忽略host驗證
* 否則可能會出現請求證書和伺服器的證書不一致的錯誤
*
* @return
*/
private HostnameVerifier hostnameVerifier = new HostnameVerifier() {

@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
};