现在越来越多的企业开始使用https模式提高数据安全,这里我只用okhttp的https(亲自测试过,可用)
在版本号22的时候,我们这么写是可以使用okhttp的https模式的
OkHttpClient myokhttp= new OkHttpClient();
mOkHttpClient = myokhttp.newBuilder()
.sslSocketFactory(HttpsTrustManager.createSSLSocketFactory())
.hostnameVerifier(new HttpsTrustManager.TrustAllHostnameVerifier()).build();
(附上HttpsTrustManager,这里是直接跳过验证,有验证需求的可以修改
public class HttpsTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
public static SSLSocketFactory createSSLSocketFactory() {
SSLSocketFactory sSLSocketFactory = null;
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, new TrustManager[]{new HttpsTrustManager()}, new SecureRandom());
sSLSocketFactory = sc.getSocketFactory();
} catch (Exception e) {
}
return sSLSocketFactory;
}
public static class TrustAllHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
}
}
)
在版本号26的时候,我们就得改成这样才可以使用okhttp的https模式
mOkHttpClient = new OkHttpClient().newBuilder()
.sslSocketFactory(HttpsTrustManager.createSSLSocketFactory())
.hostnameVerifier(new HttpsTrustManager.TrustAllHostnameVerifier()).build();
这跟版本号有关,因为我自己用的时候,版本号调成22,那么第一个方法可用,版本号调成26的时候,第一个方法不可用,第二个方法可用,似乎是因为
第一次new的时候(OkHttpClient myokhttp= new OkHttpClient();)
public OkHttpClient() {
this(new OkHttpClient.Builder());
}
而newBuilder()的时候 (mOkHttpClient = myokhttp.newBuilder() )
public OkHttpClient.Builder newBuilder() {
return new OkHttpClient.Builder(this);
}
具体使用的时候,要考虑手机的版本而不是Android studio上的版本.