国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android - OkHttp 訪問(wèn) https 的怪問(wèn)題

這篇具有很好參考價(jià)值的文章主要介紹了Android - OkHttp 訪問(wèn) https 的怪問(wèn)題。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、簡(jiǎn)述

最近使用 OkHttp 訪問(wèn) https 請(qǐng)求時(shí),在個(gè)別 Android 設(shè)備上遇到了幾個(gè)問(wèn)題,搜羅網(wǎng)上資料,經(jīng)過(guò)一番實(shí)踐后,問(wèn)題得到了解決,同時(shí),我也同步升級(jí)了我的 https 證書忽略庫(kù) ANoSSL ,在此,對(duì)搜集到的資料和問(wèn)題解決方案做個(gè)記錄。

文章中的代碼實(shí)現(xiàn)可到 GitHub 倉(cāng)庫(kù)中自行獲取:

  • https://github.com/GitLqr/ANoSSL

二、協(xié)議

要想讓 OkHttp 支持 https 請(qǐng)求,需要先對(duì) https 證書協(xié)議以及 OkHttp 的支持情況有個(gè)大概了解:

  1. 【服務(wù)端】https 證書是配置在服務(wù)端的,大體分為 SSLTLS 兩種協(xié)議,TLS (Transport Layer Security) 是 SSL 的升級(jí)版本,可以修復(fù)現(xiàn)有的 SSL 漏洞。
  2. 【客戶端】OkHttp 支持過(guò)的 https 證書協(xié)議有 SSLv3 (1996)、TLSv1 (1999)、TLSv1.1 (2006)、TLSv1.2 (2008) 和 TLSv1.3 (2018),但要注意,OkHttp 從 2014 年開始就放棄對(duì) SSLv3 支持,2019 年(3.13.x)開始放棄對(duì) TLSv1TLSv1.1 的支持,以 TLSv1.2 為最低支持標(biāo)準(zhǔn)。

資料來(lái)源:

  • https://aws.amazon.com/cn/compare/the-difference-between-ssl-and-tls/
  • https://medium.com/square-corner-blog/okhttp-3-13-requires-android-5-818bb78d07ce

我找了幾個(gè)網(wǎng)站,它們支持的 https 證書協(xié)議支持情況如下:

支持協(xié)議 www.baidu.com www.fresco-cn.org api.github.com
TLS1.3 No No Yes
TLS1.2 Yes Yes Yes
TLS1.1 Yes Yes No
TLS1.0 Yes Yes No
SSL3.0 Yes No No
SSL2.0 No No No

數(shù)據(jù)來(lái)源:

  • https://www.ssleye.com/ssltool/cipher_suites.html
  • https://www.ssllabs.com/ssltest/

可以看到,這幾個(gè)網(wǎng)站都支持 TLS1.2,而對(duì)于其他的 ssl 協(xié)議的支持力度各不相同,目前來(lái)說(shuō),TLS1.2 才是主流,但有可能存在個(gè)別網(wǎng)站不支持,所以,我們?cè)谑褂?OkHttp 發(fā)起 https 請(qǐng)求之前,首先要搞清楚,就是服務(wù)端(接口)支持的 ssl 協(xié)議有哪些。確認(rèn)好服務(wù)端的 ssl 協(xié)議支持情況后,就可以開始配置客戶端的 OkHttp 了。

三、配置

這里有個(gè)問(wèn)題,是否只要發(fā)送 https 請(qǐng)求,就一定需要給 OkHttp 配置 https 校驗(yàn)?zāi)??答案是非必須的,正常情況下 OkHttp 會(huì)使用默認(rèn)的系統(tǒng)配置,用于訪問(wèn)一般的 https 請(qǐng)求足以,但往往有一些特殊情況,就需要我們?cè)诠こ讨羞M(jìn)行單獨(dú)配置并實(shí)現(xiàn)校驗(yàn)規(guī)則,例如以下幾種情況:

  1. 服務(wù)端使用了非 CA 認(rèn)證的私有 https 證書
  2. 服務(wù)端使用了過(guò)期的 https 證書
  3. 客戶端支持某個(gè) ssl 協(xié)議但是默認(rèn)沒有啟用

好了,下面開始對(duì) OkHttp 進(jìn)行配置,大體分兩步:

  1. 配置 SSLSocketFactory:用于指定支持某種 ssl 協(xié)議的 SocketFactory
  2. 配置 HostnameVerifier:用于檢查證書中的主機(jī)名與使用該證書的服務(wù)器的主機(jī)名是否一致
val sslSocketFactory = NoSSLSocketClient.getTLSSocketFactory()
val x509TrustManager = NoSSLSocketClient.getX509TrustManager()
val hostnameVerifier = NoSSLSocketClient.getHostnameVerifier()

val okHttpClient = OkHttpClient.Builder()
    .sslSocketFactory(
        sslSocketFactory,
        x509TrustManager // 必須指定該參數(shù),否則 Android 10 及以上版本會(huì)閃退
    )
    .hostnameVerifier(hostnameVerifier)
    .build()

這里主要看 sslSocketFactory 是怎么創(chuàng)建的,前面說(shuō)過(guò),https 證書大體分為 SSLTLS 兩種協(xié)議,這里的 SSLSocketFactory 也一樣,以下是兩種協(xié)議對(duì)應(yīng)的創(chuàng)建方式,它們僅僅只是在獲取 SSLContext 實(shí)例時(shí)傳的參數(shù)不同而已:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-861801.html

// SSL(不推薦)
public static SSLSocketFactory getSSLSocketFactory() {
   
    try {
   
        SSLContext sslContext = SSLContext.getInstance("SSL");
        sslContext.init(

到了這里,關(guān)于Android - OkHttp 訪問(wèn) https 的怪問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android OKHttp源碼解析

    Android OKHttp源碼解析

    Https是Http協(xié)議加上下一層的SSL/TSL協(xié)議組成的,TSL是SSL的后繼版本,差別很小,可以理解為一個(gè)東西。進(jìn)行Https連接時(shí),會(huì)先進(jìn)行TSL的握手,完成證書認(rèn)證操作,產(chǎn)生對(duì)稱加密的公鑰、加密套件等參數(shù)。之后就可以使用這個(gè)公鑰進(jìn)行對(duì)稱加密了。 Https的加密方式同時(shí)使用了非對(duì)

    2023年04月10日
    瀏覽(21)
  • Android Okhttp 源碼淺析三

    添加網(wǎng)絡(luò)事件攔截器?Interceptor val chain = RealInterceptorChain( ? ? ? ? call = this, ? ? ? ? interceptors = interceptors, ? ? ? ? index = 0, ? ? ? ? exchange = null, ? ? ? ? request = originalRequest, ? ? ? ? connectTimeoutMillis = client.connectTimeoutMillis, ? ? ? ? readTimeoutMillis = client.readTimeoutMillis, ? ? ?

    2024年02月11日
    瀏覽(29)
  • Android OkHttp 源碼淺析一

    演進(jìn)之路:原生Android框架不好用 ---- HttpUrlConnect? ?和?Apache HTTPClient?? 第一版? 底層使用HTTPURLConnect?? 第二版 Square構(gòu)建?從Android4.4開始 基本使用: 同步方法,Deque?雙向隊(duì)列 executableCalls?添加到calls?然后取出遍歷?執(zhí)行 executeOn runningAsyncCalls?正在執(zhí)行的Call ? ?for (i in 0 until e

    2024年02月11日
    瀏覽(16)
  • Android OkHttp 源碼淺析二

    OkHttp?配置參數(shù): dispatcher?用于線程調(diào)度 connectionPool?連接池? 64 個(gè)or 5?host?可以提升復(fù)用性?方便管理和提升性能 interceptors? networkInterceptors eventListenerFactory?事件監(jiān)聽器?連接建立?發(fā)送head body?等 retryOnConnectionFailure?連接 /?請(qǐng)求 失敗是否重置 authenticator?自動(dòng)認(rèn)證修正?比如

    2024年02月11日
    瀏覽(22)
  • Android OkHttp源碼閱讀詳解一

    博主前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住也分享一下給大家 ??點(diǎn)擊跳轉(zhuǎn)到教程 前言:源碼閱讀基于okhttp:3.10.0 Android中OkHttp源碼閱讀二(責(zé)任鏈模式) 1、首先回顧OkHttp的使用 2、OkHttp源碼閱讀之線程池詳解 3、守護(hù)線程詳解 4、根據(jù)OkHttp中構(gòu)

    2024年02月10日
    瀏覽(24)
  • Android OkHttp源碼分析--分發(fā)器

    Android OkHttp源碼分析--分發(fā)器

    OkHttp是當(dāng)下Android使用最頻繁的網(wǎng)絡(luò)請(qǐng)求框架,由Square公司開源。Google在Android4.4以后開始將源碼中 的HttpURLConnection底層實(shí)現(xiàn)替換為OKHttp,同時(shí)現(xiàn)在流行的Retrofit框架底層同樣是使用OKHttp的。 OKHttp優(yōu)點(diǎn): 1、支持Http1、Http2、Quic以及WebSocket; 2、連接池復(fù)用底層TCP(Socket),減少請(qǐng)求

    2024年02月13日
    瀏覽(34)
  • Android 使用okhttp監(jiān)控網(wǎng)絡(luò)數(shù)據(jù)

    Android 使用okhttp監(jiān)控網(wǎng)絡(luò)數(shù)據(jù)

    這里使用Okhttp寫了一個(gè)demo來(lái)監(jiān)聽網(wǎng)絡(luò)請(qǐng)求過(guò)程中的一系列數(shù)據(jù),包括當(dāng)前網(wǎng)絡(luò)類型、請(qǐng)求體、響應(yīng)體大小,url,請(qǐng)求方式,當(dāng)然還有本次核心獲取域名解析時(shí)長(zhǎng),建立連接時(shí)長(zhǎng),保持連接時(shí)長(zhǎng),請(qǐng)求總時(shí)長(zhǎng)這些數(shù)據(jù)。 一次網(wǎng)絡(luò)請(qǐng)求經(jīng)歷了哪些過(guò)程 通過(guò)域名訪問(wèn)的方式來(lái)請(qǐng)求

    2024年02月11日
    瀏覽(30)
  • Android OKhttp使用(下載和上傳文件)

    首先在build.gradle中引入okhttp 下面是demo(用okthttp下載網(wǎng)絡(luò)上的資源) 用okthttp將資源上傳至網(wǎng)絡(luò)

    2024年02月11日
    瀏覽(37)
  • Android Okhttp3 分發(fā)器源碼解析

    在 OkHttp 中,分發(fā)器(Dispatcher)是負(fù)責(zé)調(diào)度和執(zhí)行網(wǎng)絡(luò)請(qǐng)求的組件。它 管理 著 并發(fā) 的 請(qǐng)求數(shù)量 以及請(qǐng)求的 優(yōu)先級(jí) ,確保合理地使用底層的連接池和線程池,從而 提高 網(wǎng)絡(luò)請(qǐng)求的 效率 和 性能 。 默認(rèn)情況下,OkHttp 使用一個(gè)單例的分發(fā)器,它可以處理同時(shí)進(jìn)行的最大請(qǐng)求

    2024年02月12日
    瀏覽(21)
  • [Android]網(wǎng)絡(luò)框架之OkHttp(詳細(xì))(kotlin)

    [Android]網(wǎng)絡(luò)框架之OkHttp(詳細(xì))(kotlin)

    目錄 OkHttp的介紹 添加依賴 OkHttp的使用 get的同步與異步請(qǐng)求 post的同步與異步請(qǐng)求 POST請(qǐng)求的數(shù)據(jù)格式 POST請(qǐng)求上傳文件 POST請(qǐng)求上傳json對(duì)象 POST請(qǐng)求上傳多個(gè)數(shù)據(jù) OkHttp的配置 1.Builder構(gòu)建器 2.自定義攔截器 3.自定義緩存 4. 自定義Cookie https://square.github.io/okhttp/ 由Square公司貢獻(xiàn)的

    2024年02月12日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包