最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

同步場景首選 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"))

遇到證書鏈問題(測試環(huán)境或自簽證書),不要馬上 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,示例(簡略):

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í)做兼容測試。

四、常見 HTTPS 問題與對應(yīng)策略

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

五、反爬策略與工程化對策

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

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

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

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • Python調(diào)用接口合并Excel表代碼實(shí)例

    Python調(diào)用接口合并Excel表代碼實(shí)例

    這篇文章主要介紹了Python調(diào)用接口合并Excel表代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • PyMongo安裝使用筆記

    PyMongo安裝使用筆記

    這篇文章主要介紹了PyMongo安裝使用筆記,本文講解使用pip方式安裝PyMongo,并給出一個(gè)pymongo的簡單使用代碼實(shí)例,需要的朋友可以參考下
    2015-04-04
  • Python調(diào)用shell cmd方法代碼示例解析

    Python調(diào)用shell cmd方法代碼示例解析

    這篇文章主要介紹了Python調(diào)用shell cmd方法代碼示例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 如何基于python實(shí)現(xiàn)歸一化處理

    如何基于python實(shí)現(xiàn)歸一化處理

    這篇文章主要介紹了如何基于python實(shí)現(xiàn)歸一化處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Django項(xiàng)目如何正確配置日志(logging)

    Django項(xiàng)目如何正確配置日志(logging)

    本文將教你如何在Django項(xiàng)目中正確配置日志(logging),讓Django生成log日志文件,并在程序運(yùn)行發(fā)生error級別故障時(shí)通知管理員。
    2021-04-04
  • 在Pandas中處理NaN值的方法

    在Pandas中處理NaN值的方法

    這篇文章主要介紹了在Pandas中處理NaN值的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python實(shí)現(xiàn)刪除列表中滿足一定條件的元素示例

    Python實(shí)現(xiàn)刪除列表中滿足一定條件的元素示例

    這篇文章主要介紹了Python實(shí)現(xiàn)刪除列表中滿足一定條件的元素,結(jié)合具體實(shí)例形式對比分析了Python針對列表元素的遍歷、復(fù)制、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • Python?queue模塊功能大全

    Python?queue模塊功能大全

    queue模塊是Python內(nèi)置的標(biāo)準(zhǔn)模塊,可以直接通過import?queue引用,這篇文章主要介紹了Python?queue模塊都具有哪些功能,需要的朋友可以參考下
    2023-04-04
  • tensorflow 獲取checkpoint中的變量列表實(shí)例

    tensorflow 獲取checkpoint中的變量列表實(shí)例

    今天小編就為大家分享一篇tensorflow 獲取checkpoint中的變量列表實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python入門教程(九)Python字符串介紹

    Python入門教程(九)Python字符串介紹

    這篇文章主要介紹了Python入門教程(九)Python字符串,Python是一門非常強(qiáng)大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04

最新評論

鞍山市| 洛川县| 井冈山市| 兴化市| 博罗县| 永丰县| 铜鼓县| 漳州市| 六枝特区| 稻城县| 土默特左旗| 耒阳市| 阿坝| 垦利县| 新密市| 高雄市| 诸城市| 都昌县| 仙居县| 西青区| 新密市| 永年县| 江安县| 荣成市| 丹巴县| 巴青县| 巴彦县| 游戏| 望谟县| 龙江县| 汶川县| 潜江市| 石河子市| 阜南县| 临桂县| 铜山县| 卓尼县| 出国| 建瓯市| 邵武市| 突泉县|