http://blog.youkuaiyun.com/lmj623565791/article/details/48129405 鸿洋大神的这个文章说的很明白,但是随着OKhttp的改版,有的方法已经不存在了。
比如说:
mOkHttpClient.setSslSocketFactory(sslContext.getSocketFactory());
这个方法,已经没有了。
但是只要OKhttp依然支持HTTPS的解析,那么肯定还有类似的方法可以使用。
然后我们查看OKhttpClient的源码:找到了这个方法
public Builder sslSocketFactory(SSLSocketFactory sslSocketFactory)
我们知道,一般初始化的时候OKhttp都是通过builder来创建的,以便我们设置
Builder(OkHttpClient okHttpClient) {
this.dispatcher = okHttpClient.dispatcher;
this.proxy = okHttpClient.proxy;
this.protocols = okHttpClient.protocols;
this.connectionSpecs = okHttpClient.connectionSpecs;
this.interceptors.addAll(okHttpClient.interceptors);
this.networkInterceptors.addAll(okHttpClient.networkInterceptors);
this.proxySelector = okHttpClient.proxySelector;
this.cookieJar = okHttpClient.cookieJar;
this.internalCache = okHttpClient.internalCache;
this.cache = okHttpClient.cache;
this.socketFactory = okHttpClient.socketFactory;
this.sslSocketFactory = okHttpClient.sslSocketFactory;
this.certificateChainCleaner = okHttpClient.certificateChainCleaner;
this.hostnameVerifier = okHttpClient.hostnameVerifier;
this.certificatePinner = okHttpClient.certificatePinner;
this.proxyAuthenticator = okHttpClient.proxyAuthenticator;
this.authenticator = okHttpClient.authenticator;
this.connectionPool = okHttpClient.connectionPool;
this.dns = okHttpClient.dns;
this.followSslRedirects = okHttpClient.followSslRedirects;
this.followRedirects = okHttpClient.followRedirects;
this.retryOnConnectionFailure = okHttpClient.retryOnConnectionFailure;
this.connectTimeout = okHttpClient.connectTimeout;
this.readTimeout = okHttpClient.readTimeout;
this.writeTimeout = okHttpClient.writeTimeout;
}
然后我们可以看到this.sslSocketFactory,所以方法我们可以改成:
builder.sslSocketFactory(setCertificates(context.getAssets().open(“-12306cn.crt”)));
因为12306的界面现在已经所以我目前没有找到可测试的网站。大家感兴趣的可以自己测试使用一下。