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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏上善若水

041android初级篇之apk签名key keystore格式转pk8+x509.pem

常用的android的签名工具有两个即jarsigner 和apksigner。这两种使用的key格式不一样,keystore格式转pk8+x509.pem

22740
来自专栏高性能服务器开发

(八)高性能服务器架构设计总结2——以flamigo服务器代码为例

说了这么多,我们来以flamingo的服务器程序的网络框架设计为例来验证上述介绍的理论。flamingo的网络框架是基于陈硕的muduo库,改成C++11的版本...

22110
来自专栏学海无涯

一篇文章搞定密码学基础

密码技术是网络安全的基础,也是核心。现在对隐私保护、敏感信息尤其重视,所以不论是系统开发还是App开发,只要有网络通信,很多信息都需要进行加密,以防止被截取篡改...

42790
来自专栏Scott_Mr 个人专栏

RxSwift 系列(八) -- Error Handing Operators

36960
来自专栏葬爱家族

Android Notification

经常熬夜有三大害处:第一,记忆力越来越差;第二,数学水平下降;第四,记忆力越来越差。

14120
来自专栏c#开发者

Beini Compatible Hardware List

Beini Compatible Hardware List Do not expect that you will be able to hack WiFi ...

37340
来自专栏向治洪

Intent和PendingIntent的区别

intent英文意思是意图,pending表示即将发生或来临的事情。  PendingIntent这个类用于处理即将发生的事情。比如在通知Notificat...

21580
来自专栏Rgc

前端js,后台python实现RSA非对称加密

先熟悉使用 在后台使用RSA实现秘钥生产,加密,解密;   # -*- encoding:utf-8 -*- import base64 from C...

92860
来自专栏Linux驱动

18.QT-QPlainEdit 信号与槽

20170
来自专栏向治洪

android notification,notificationmanager详解

我们知道在使用Android的通知的时候一定会用到NotificationManager 、 Notification这两个类,这两个类的作用分别是: Noti...

24770

扫码关注云+社区

领取腾讯云代金券