亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python爬蟲(chóng)HTTPS使用requests,httpx,aiohttp實(shí)戰(zhàn)中的證書(shū)異步等問(wèn)題

 更新時(shí)間:2025年09月27日 11:14:08   作者:寫(xiě)的做不如改的多  
在爬蟲(chóng)工程里,“HTTPS” 是繞不開(kāi)的話題,HTTPS 為傳輸加密提供保護(hù),同時(shí)也給爬蟲(chóng)帶來(lái)證書(shū)校驗(yàn)、重定向、SNI、HTTP/2 及服務(wù)端反爬策略等一系列挑戰(zhàn),本文從實(shí)戰(zhàn)角度出發(fā),面向開(kāi)發(fā)者講清用 Python 做 HTTPS 爬蟲(chóng)時(shí)常見(jiàn)的陷阱、可復(fù)制的代碼示例、抓包與調(diào)試方法

在爬蟲(chóng)工程里,“HTTPS” 是繞不開(kāi)的話題。HTTPS 為傳輸加密提供保護(hù),同時(shí)也給爬蟲(chóng)帶來(lái)證書(shū)校驗(yàn)、重定向、SNI、HTTP/2 及服務(wù)端反爬策略等一系列挑戰(zhàn)。本文從實(shí)戰(zhàn)角度出發(fā),面向開(kāi)發(fā)者講清用 Python 做 HTTPS 爬蟲(chóng)時(shí)常見(jiàn)的陷阱、可復(fù)制的代碼示例、抓包與調(diào)試方法,以及遇到 iOS/移動(dòng)端或強(qiáng)安全場(chǎng)景時(shí)的應(yīng)對(duì)思路(包括把真機(jī)抓包工具作為補(bǔ)充手段)。目標(biāo)是把“能跑但不穩(wěn)”變成“可工程化維護(hù)”的爬蟲(chóng)方案。

一、核心問(wèn)題與優(yōu)先級(jí)檢查(先問(wèn)三件事)

在動(dòng)手寫(xiě)代碼前,先確認(rèn):

  1. 目標(biāo)是頁(yè)面(需要渲染 JS)還是 API(JSON/二進(jìn)制)?
  2. 是否必須支持 HTTP/2 或特殊 TLS 特性?
  3. 是否存在證書(shū)自簽、客戶端證書(shū)(mTLS)或明顯的反爬保護(hù)? 這些判斷決定你選 requestshttpx/aiohttp(并發(fā))、還是 Selenium/Playwright(渲染)。

二、基礎(chǔ)示例:requests 與證書(shū)處理

同步場(chǎng)景首選 requests,典型代碼如下:

import requests
s = requests.Session()
s.headers.update({"User-Agent":"Mozilla/5.0"})
resp = s.get("https://example.com/api", timeout=10)  # 默認(rèn) verify=True
print(resp.status_code, resp.headers.get("content-type"))

遇到證書(shū)鏈問(wèn)題(測(cè)試環(huán)境或自簽證書(shū)),不要馬上 verify=False,應(yīng)指定 CA bundle:

resp = s.get("https://test.local", verify="/path/to/ca_bundle.pem")

僅在臨時(shí)調(diào)試才使用 verify=False,生產(chǎn)禁用。

三、高并發(fā)選型:httpx / aiohttp(異步)

當(dāng)需要高并發(fā)抓取時(shí),異步 HTTP 客戶端更省資源。httpx 支持 HTTP/2,示例(簡(jiǎn)略):

import httpx, asyncio
async def fetch(client,url):
    r = await client.get(url)
    return r.status_code

async def main(urls):
    async with httpx.AsyncClient(http2=True,timeout=10) as client:
        tasks = [fetch(client,u) for u in urls]
        return await asyncio.gather(*tasks)

注意:HTTP/2 有時(shí)影響服務(wù)器返回邏輯(不同分支代碼),必要時(shí)做兼容測(cè)試。

四、常見(jiàn) HTTPS 問(wèn)題與對(duì)應(yīng)策略

  1. CERTIFICATE_VERIFY_FAILED:更新 certifi、使用受信任 CA 或把服務(wù)證書(shū)加入本地 CA。
  2. SNI/域名不匹配:用 openssl s_client -connect host:443 -servername host 在本地先驗(yàn)證。
  3. 重定向與簽名失效:保持同一 Session,保留 cookie;簽名類接口對(duì)時(shí)間敏感,確保本機(jī)時(shí)間同步。
  4. 壓縮/編碼(gzip / brotli):現(xiàn)代庫(kù)會(huì)自動(dòng)解壓,二進(jìn)制格式(protobuf)需用 proto 描述解析。
  5. HTTP/2 行為差異:當(dāng)返回異?;蚩阵w,嘗試降級(jí)到 HTTP/1.1 做對(duì)比驗(yàn)證。

五、反爬策略與工程化對(duì)策

  • Header 與 UA 模擬:隨機(jī) UA、常見(jiàn) Referer 與 Accept-Language。
  • IP 輪換與代理池:集成穩(wěn)定代理池并追蹤異常率,優(yōu)先用高匿名代理。
  • 請(qǐng)求節(jié)流與退避:隨機(jī)延遲、指數(shù)回退、冪等冪次控制。
  • 行為模擬:必要時(shí)用瀏覽器自動(dòng)化(Selenium / Playwright)模擬 JS 執(zhí)行與交互。
  • 驗(yàn)證碼與登錄:優(yōu)先與站點(diǎn)溝通獲取 API 憑證或使用授權(quán)接口,避免違規(guī)逆向。

六、抓包調(diào)試技巧(定位 HTTPS 問(wèn)題的關(guān)鍵)

抓包能把“看不到的握手”變成可分析的證據(jù)。推薦步驟:

  1. 在本地用 mitmproxy / Charles / Fiddler 做代理抓包,配置客戶端走代理并安裝 CA,觀察請(qǐng)求/響應(yīng)頭與 body。
  2. 若代理無(wú)效(如移動(dòng) App 有 Pinning 或 mTLS),用底層抓包 tcpdump + Wireshark 分析 TLS 握手(ClientHello/Alert),確認(rèn)是否為證書(shū)/協(xié)議不兼容或被中間件攔截。
  3. 在 iOS/Android 真機(jī)場(chǎng)景,普通代理可能被拒絕——這時(shí)把USB 直連真機(jī)抓包工具納入流程(例如抓包大師 Sniffmaster),它能按 App 抓取流量并導(dǎo)出 pcap,便于在 Wireshark 中做握手與時(shí)序分析。注意使用須合規(guī)與授權(quán)。

七、故障案例與解決示例(快速可用)

問(wèn)題:在 requests 下能正常獲取,但在 httpx/http2 下返回空體或 502。 排查:用 curl --http2 -vopenssl s_client 對(duì)比握手與 ALPN;若確定 HTTP/2 導(dǎo)致,臨時(shí)禁用 http2,或調(diào)整 client 配置與服務(wù)器端協(xié)商。

問(wèn)題:只有移動(dòng)端 App 報(bào) TLS 握手失敗。 排查:用 Sniffmaster(或在設(shè)備上配置代理并安裝證書(shū))抓取 pcap,檢查 ClientHello 的 SNI、cipher suite 列表和是否發(fā)送客戶端證書(shū)(mTLS)。根據(jù)結(jié)果決定是否需要使用測(cè)試證書(shū)或調(diào)整客戶端簽名邏輯。

八、工程化建議與監(jiān)控

  • 把“采集任務(wù)”做成可配置的 pipeline:任務(wù)配置(headers、ip池、速率)→ 抓取 → 解析 → 入庫(kù) → 質(zhì)量校驗(yàn)。
  • 加入異常監(jiān)控:TLS 握手失敗率、403/429 占比、平均響應(yīng)時(shí)延。發(fā)生異常時(shí)自動(dòng)切換代理或降級(jí)策略并告警。
  • 在 CI 環(huán)境加回歸抓取測(cè)試,確保目標(biāo)站點(diǎn)變更能被及時(shí)發(fā)現(xiàn)。

九、合規(guī)與安全提醒

尊重目標(biāo)站點(diǎn)的 robots、服務(wù)條款和法律法規(guī)。抓包、存儲(chǔ)或分析含敏感信息的數(shù)據(jù)時(shí)務(wù)必脫敏并限制訪問(wèn)。對(duì)于需登錄或需授權(quán)的數(shù)據(jù),優(yōu)先爭(zhēng)取官方接口或授權(quán)環(huán)境。

用 Python 做 HTTPS 爬蟲(chóng)不是一項(xiàng)單純的編程題,而是把網(wǎng)絡(luò)層、TLS、反爬、抓包與工程化策略結(jié)合起來(lái)的系統(tǒng)工程。把抓包與握手分析作為常備工具鏈(mitmproxy/Charles + tcpdump/Wireshark + 必要時(shí)的真機(jī)直連工具如 Sniffmaster),并把證書(shū)與代理管理、代理池、重試與監(jiān)控做成可配置模塊,能讓你的爬蟲(chóng)既穩(wěn)健又易維護(hù)。

到此這篇關(guān)于Python爬蟲(chóng)HTTPS使用requests,httpx,aiohttp實(shí)戰(zhàn)中的證書(shū)異步等問(wèn)題的文章就介紹到這了,更多相關(guān)Python爬蟲(chóng)HTTPS使用requests,httpx,aiohttp內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python獲取svn版本信息

    Python獲取svn版本信息

    本文主要介紹了Python獲取svn版本信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • python time模塊用法實(shí)例詳解

    python time模塊用法實(shí)例詳解

    這篇文章主要介紹了python中time模塊的用法,包括了各類時(shí)間函數(shù),需要的朋友可以參考下
    2014-09-09
  • Python實(shí)現(xiàn)byte轉(zhuǎn)integer

    Python實(shí)現(xiàn)byte轉(zhuǎn)integer

    這篇文章主要介紹了Python實(shí)現(xiàn)byte轉(zhuǎn)integer操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Python使用aiohttp實(shí)現(xiàn)每秒千次的網(wǎng)頁(yè)抓取

    Python使用aiohttp實(shí)現(xiàn)每秒千次的網(wǎng)頁(yè)抓取

    在當(dāng)今大數(shù)據(jù)時(shí)代,高效的網(wǎng)絡(luò)爬蟲(chóng)是數(shù)據(jù)采集的關(guān)鍵工具,傳統(tǒng)的同步爬蟲(chóng)由于受限于I/O阻塞,難以實(shí)現(xiàn)高并發(fā)請(qǐng)求,而Python的aiohttp可以輕松實(shí)現(xiàn)異步高并發(fā)爬蟲(chóng),達(dá)到每秒千次甚至更高的請(qǐng)求速率,所以本文介紹了Python如何使用aiohttp實(shí)現(xiàn)每秒千次的網(wǎng)頁(yè)抓取
    2025-08-08
  • Python使用python-docx讀寫(xiě)word文檔

    Python使用python-docx讀寫(xiě)word文檔

    這篇文章主要為大家詳細(xì)介紹了Python使用python-docx讀寫(xiě)word文檔,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Python列表中存放字典遇到的問(wèn)題及處理

    Python列表中存放字典遇到的問(wèn)題及處理

    這篇文章主要介紹了Python列表中存放字典遇到的問(wèn)題及處理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • pycharm打包py項(xiàng)目為.exe可執(zhí)行文件的兩種方式

    pycharm打包py項(xiàng)目為.exe可執(zhí)行文件的兩種方式

    本文主要介紹了pycharm打包py項(xiàng)目為.exe可執(zhí)行文件的兩種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Python Websocket服務(wù)端通信的使用示例

    Python Websocket服務(wù)端通信的使用示例

    這篇文章主要介紹了Python Websocket服務(wù)端通信的使用示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • python 如何查看pytorch版本

    python 如何查看pytorch版本

    這篇文章主要介紹了python 查看pytorch版本的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • 利用python打開(kāi)攝像頭及顏色檢測(cè)方法

    利用python打開(kāi)攝像頭及顏色檢測(cè)方法

    今天小編就為大家分享一篇利用python打開(kāi)攝像頭及顏色檢測(cè)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08

最新評(píng)論