您的位置:首页 > 理论基础 > 计算机网络

使用picasso加载需要证书的https图片

2017-08-23 18:02 113 查看
我在项目中用到的图片加载框架是picasso,但是最近遇到个问题,picasso加载不出来公司的https图片,查了下需要将以下代码到application中

final OkHttpClient client = new OkHttpClient.Builder()
.protocols(Collections.singletonList(Protocol.HTTP_1_1))
.build();

final Picasso picasso = new Picasso.Builder(this)
.downloader(new OkHttp3Downloader(client))
.build();
Picasso.setSingletonInstance(picasso);


但是加了之后还是不能加载出来,琢磨了一下可能是要加证书进行验证,因为picasso内部是okhttp进行下载的,所以查了下给okhttp设置单项证书认证,加上单项认证之后确实也就可以加载出来了,关于okhttp单向认证的问题下篇再讲。

贴一下我这边完整的代码

HttpsUtils.SSLParams sslParams =null;
try {
sslParams=HttpsUtils.getSslSocketFactory(new InputStream[]{getAssets().open("ddsoucai.cer")},
null, null);
} catch (Exception e) {
e.printStackTrace();
}
OkHttpClient client = new OkHttpClient.Builder()

.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
})
.sslSocketFactory(sslParams.sSLSocketFactory,sslParams.trustManager)//https
.build();
final Picasso picasso = new Picasso.Builder(this)
.downloader(new OkHttp3Downloader(client))
.build();
Picasso.setSingletonInstance(picasso);


至于上面代码中的HttpsUtils是一个单向认证的工具类。其中的OkHttp3Downloader是特意为picasso写的加载https图片所做的一个类OkHttp3Downloader

至于为什么不直接把HttpsUtils类代码贴出来,那是因为我要跑路回家了,有空再补
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息