美文网首页
Glide加载https图片时 忽略证书校验

Glide加载https图片时 忽略证书校验

作者: Pino | 来源:发表于2021-11-18 15:34 被阅读0次

    出现这个问题的原因 无非是后端没有配置好证书导致,可参考 https://www.jianshu.com/p/76a9b1c1a616
    这个地址是用Fresco引擎加载图片,那么Glide呢?
    Glide不同版本,自定义okhttp的方法不同
    这里仅仅提供两个版本 v3.7.0 和v 4.12.0

    v3.7.0是比较简单的

    依赖

    implementation 'com.github.bumptech.glide:glide:3.7.0'
    implementation 'com.github.bumptech.glide:okhttp-integration:1.3.1'
    

    Application配置

    public class AppStart extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            // Glide3.7.0 okhttp-integration:1.3.1
             Glide.get(this).register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(getOkHttpClient()));
        }
    
        public OkHttpClient getOkHttpClient () {
            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) {
                            }
    
    
                            @Override
                            public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {
                            }
    
                            @Override
                            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                                X509Certificate[] x509Certificates = new X509Certificate[0];
                                return x509Certificates;
                            }
                        }
                };
    
                // 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.setProtocols(Arrays.asList(Protocol.HTTP_1_1));
                okHttpClient.setHostnameVerifier((hostname, session) -> true);
                return okHttpClient;
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
    

    使用

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ImageView imageView=findViewById(R.id.iv_logo);
    
            String path="";
            Glide.with(this).load(path).into(imageView);
        }
    }
    

    传送门 https://gitee.com/Pino_W/glide3.7_custom_okhttp.git

    v4.12.0 自定义ok相对麻烦点 代码就不贴了 直接下载demo跑起来

    传送门 https://gitee.com/Pino_W/glide4.12_custom_okhttp.git

    相关文章

      网友评论

          本文标题:Glide加载https图片时 忽略证书校验

          本文链接:https://www.haomeiwen.com/subject/slodtrtx.html