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方法中進行設置