一、创建OkHttpClient
mOkHttpClient = new OkHttpClient.Builder()
.retryOnConnectionFailure(false)//允许失败重试
.readTimeout(TIMEOUT, TimeUnit.SECONDS)//设置读取超时时间
.writeTimeout(TIMEOUT, TimeUnit.SECONDS)//设置写的超时时间
.connectTimeout(TIMEOUT, TimeUnit.SECONDS)//设置连接超时时间
.pingInterval(PING_TIME, TimeUnit.SECONDS)//心跳
.certificatePinner(CertificatePinner.DEFAULT)
.hostnameVerifier(SSLSocketClient.getHostnameVerifier())//配置
.sslSocketFactory(SSLSocketClient.getSSLSocketFactory(),
SSLSocketClient.getX509TrustManager())
//设置cookie,后台需要如果不设置,连接不上
.cookieJar(new CookieJarImpl(PersistentCookieStore.getInstance()))
.addInterceptor(new UserAgentInterceptor())
.build();
二、SSLSocketClient.class
public class SSLSocketClient {
//获取这个SSLSocketFactory
public static SSLSocketFactory getSSLSocketFactory() {
try {
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, getTrustManager(), new SecureRandom());
return sslContext.getSocketFactory();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//获取TrustManager
private static TrustManager[] getTrustManager() {
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[]{};
}
}
};
return trustAllCerts;
}
//获取HostnameVerifier
public static HostnameVerifier getHostnameVerifier() {
HostnameVerifier hostnameVerifier = (s, sslSession) -> true;
return hostnameVerifier;
}
public static X509TrustManager getX509TrustManager() {
X509TrustManager x509TrustManager = 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[0];
}
};
return x509TrustManager;
}
}