OkHttp關於https請求的設置

https請求由於證書驗證問題,直接請求一般都會失敗.一般是做證書驗證處理或者忽略證書驗證,這裏介紹後者.解決方案從外文文章中看到,這裏搬磚一下.希望對大家有幫助

  public static OkHttpClient getUnsafeOkHttpClient() {

        try {
            // Create a trust manager that does not validate certificate chains
            final 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 null;
                }
            }};

            // Install the all-trusting trust manager
            final SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustAllCerts,
                    new java.security.SecureRandom());
            // Create an ssl socket factory with our all-trusting manager
            final SSLSocketFactory sslSocketFactory = sslContext
                    .getSocketFactory();

            OkHttpClient okHttpClient = new OkHttpClient();
            okHttpClient.setSslSocketFactory(sslSocketFactory);
            okHttpClient.setHostnameVerifier(new HostnameVerifier() {

                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;

                }
            });

            return okHttpClient;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }


}

由於Retrofit庫和Picasso庫的網絡請求都是基於OkHttp,大家在使用這兩個庫的時候也可以使用此解決方案,來進行https請求 Picasso庫做如下配置即可:

Picasso picasso = new Picasso.Builder(context) .downloader(new OkHttpDownloader(client)) .build();

不過建議大家用如下方方法配置,這樣配置後即可像平時那樣正常使用Picasso

//設置Picasso
Picasso.setSingletonInstance(new Picasso.Builder(context).
downloader(newOkHttpDownloader(RetrofitUtils.getClient(context)))
.build());

這段代碼只可以執行一次,不然會報錯,可以放在Application類中oncreate方法中進行設置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章