Android 中使用Https 相关问题

问题描述:
由于iOS官方强制使用https,所以后台最近把所有接口切换到https,据说就是在把协议换了一下。然后Android这边也就把接口路径由http换成了https.问题来了,就是偶尔会出现 网络超时的情况,而且一出现超时则后面的请求都会超时,然后过一会又可以连接上。出现超时的时候在后台查下日志,发现请求都没到服务器去,好像直接在客户端断开了。不知道有木有人遇到过这种情况。

网络框架用的 OKHttp,设置了下面的代码:

 mOkHttpClient = new OkHttpClient.Builder()
                .cache(cache)
                .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
                .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
                .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
                .sslSocketFactory(createSSLSocketFactory(),mMyTrustManager)
                .hostnameVerifier(new TrustAllHostnameVerifier())
                .build();
                
 
    private MyTrustManager mMyTrustManager;

    private SSLSocketFactory createSSLSocketFactory() {
        SSLSocketFactory ssfFactory = null;
        try {
            mMyTrustManager = new MyTrustManager();
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, new TrustManager[]{mMyTrustManager}, new SecureRandom());
            ssfFactory = sc.getSocketFactory();
        } catch (Exception ignored) {
            ignored.printStackTrace();
        }

        return ssfFactory;
    }
     //实现X509TrustManager接口
    public class MyTrustManager 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];
        }
    }
    
    //实现HostnameVerifier接口
    private class TrustAllHostnameVerifier implements HostnameVerifier {
        @Override
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    }

    
阅读 2.7k
1 个回答

让httpclient信任所有的服务器证书,这种方法安全性则差一些,但实现相对简单

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题