首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OkHttp关于https请求的设置

OkHttp关于https请求的设置

作者头像
夏洛克的猫
发布2018-10-18 14:27:39
3.2K0
发布2018-10-18 14:27:39
举报
文章被收录于专栏:移动开发移动开发

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方法中进行设置

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年12月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档