问题及处理方法记录
Http请求时候出现这个问题,一般都是请求的Url使用的是Https ,但是安全证书有问题,导致请求失败,根源在证书问题上,这里我们不影响开发的话,可以在代码里面配置,暂时避免这个错误。
1、项目中添加这个类
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(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[0];
}
}
};
return trustAllCerts;
}
// 获取HostnameVerifier
public static HostnameVerifier getHostnameVerifier() {
HostnameVerifier hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
};
return hostnameVerifier;
}
}
2、OkhttpClicent配置
public OkHttpClient.Builder createOkHttpBuilder() {
OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder();
...
// 添加下面两句代码
okHttpBuilder.sslSocketFactory(SSLSocketClient.getSSLSocketFactory());
okHttpBuilder.hostnameVerifier(SSLSocketClient.getHostnameVerifier());
return okHttpBuilder;
}