Retrofit/Okhttp Https兼容到Http降級(jí)處理實(shí)踐

Tamic /http://m.itdecent.cn/p/efcbf795e95b
尊重原創(chuàng),授權(quán)請(qǐng)?jiān)L問(wèn):http://www.banquanyin.com/u/101701130004540

之前出的一篇文章 - Retrofit 2.0 超能實(shí)踐,完美支持Https傳輸詳細(xì)介紹了使用okhttp支持https的步驟,很多人要的是所以一切Https都要免信任,實(shí)則就是全部放開(kāi),那么下面的代碼就是介紹如何將okHttp進(jìn)行免信任Https鏈接。

信任所有https

信任所有https請(qǐng)求,也就是放行所有的證書(shū)驗(yàn)證,具體可以直接將OkHttpClientHostnameVerifier設(shè)置為true

OkHttpClient client = new OkHttpClient();

client.setHostnameVerifier(new HostnameVerifier() {
    @Override
    public boolean verify(String s, SSLSession sslSession) {
        return true;
    }
});
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
    @Override
    public void checkClientTrusted(
            java.security.cert.X509Certificate[] x509Certificates,
            String s) throws java.security.cert.CertificateException {
    }

    @Override
    public void checkServerTrusted(
            java.security.cert.X509Certificate[] x509Certificates,
            String s) throws java.security.cert.CertificateException {
    }

    @Override
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
        return new java.security.cert.X509Certificate[] {};
    }
} };

try {
   //構(gòu)造自己的SSLContext
    SSLContext sc = SSLContext.getInstance("TLS");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    client.setSslSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
    e.printStackTrace();
}

接著設(shè)置協(xié)議為 1.1(Protocol.HTTP_1_1)

    client.protocols(Collections.singletonList(Protocol.HTTP_1_1))
     .build();

目前OKhttp3.5 已經(jīng)將setHostnameVerifier函數(shù) 放到builder當(dāng)中了,你可以使用 OkHttpClientbuilder.HostnameVerifier進(jìn)行操作,實(shí)則內(nèi)部調(diào)用都一樣。

衍生

目前眾多框架使用okhttp, 著名的有picasso,glide, Retrofit等,通過(guò)上面的姿勢(shì),就能很好的讓這些框架默認(rèn)支持Https鏈接。

今天的文章比較簡(jiǎn)短,但實(shí)用性比價(jià)高

閱讀推薦

Tamic /http://m.itdecent.cn/p/efcbf795e95b
尊重原創(chuàng),授權(quán)請(qǐng)?jiān)L問(wèn):http://www.banquanyin.com/u/101701130004540

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容