記一次 Fiddler 無法抓包 PyCharm 的問題


前言

之前嘗試分析某條的反爬蟲策略,結果遇到了 Fiddler 無法抓取 PyCharm 發出的請求的怪事。請求可以正常發出與獲取響應,但就是在 Fiddler 看不到記錄。

因此筆者可以確定是自身環境的問題,不是網站的手段(它哪里做得到讓我抓不到,但是又能有響應呢!)

幾天后,又看到一位新人提出了一個小問題,想幫幫忙。但是軟件還是抓不到數據,於是就動手解決一下(善良就是好)。

經過一步步排查,筆者最終發現問題所在(原來是筆者自己以前給自己挖的坑😨,都給忘了)。讀者可以根據我的思路進行檢查。

歸根結底,筆者此次問題是因為軟件的設置問題。

排查問題

代理設置問題

首先網上看一下有沒有相關方法。

看到有說代理的問題,我想到了是不是我的 Fiddler 設置代理的時候出現了問題,沒有成功設置系統代理。

網上的大部分都是在代碼里手動將請求發送到 Fiddler 代理上的,而我的一般都是直接設置成系統代理,所以我一般都可以直接抓包的。但是現在唯獨抓不到 PyCharm 的包,就瀏覽器還是可以正常抓包

還是看一下吧,在系統設置看了一下,代理設置正常:

圖片

看一下 Fiddler 設置里的端口,也是 8888。

說明系統代理應該沒有問題,那么會不會是 PyCharm 沒走這個端口呢?

於是手動在代碼里設置上代理:

import requests

data = requests.get(url='https://www.baidu.com',
                    proxies={'http': 'http://127.0.0.1:8888', 'https': 'http://127.0.0.1:8888'}).text
print(data)

PyCharm 還是正常的獲取到了響應,但是筆者的 Fiddler 里還是沒有顯示任何從 PyCharm 進程里獲取到的數據!

規則設置問題

既然代理設置沒有問題,那么會不會是被我用的什么 Fiddler 規則隱藏了呢?

這個問題應該是不大可能的,因為以前好像都是可以的獲取到的(實際上以前獲取到的都是 http 的請求,這時候筆者還沒注意到)。

但是,嘗試看看,萬一是在什么地方不小心開啟了多余的太廣泛的規則,或者發生 bug 了呢。

首先,我們確定是要抓取的是 All Processes 所有進程,左下角:

圖片

再看一下左下角的 Filters ,這些設置的過濾器是沒有問題的:

圖片

在右邊的窗口也是有 Filters 選項卡的,記得自己看看。筆者因為自己從沒使用過該功能,所以此處便沒有查驗。

在 Rules 里看一下啟用的規則:

圖片

全部關了看看。就在筆者關閉掉這些規則以后,發現了一些端倪:

圖片

由於關閉了 Hide CONNECTs,顯示出來了 Tunnel to。而這些便是與 https 建立連接相關的!

說明可以抓取到一定的數據,但是不知為何無法抓取到完整的請求。

Fiddler HTTPS 抓取設置問題

筆者打開軟件設置看了一下,發現了自己以前給自己挖的坑:

圖片

那路或多!軟件被設置了只解密來自瀏覽器的 https 連接

先前被遺忘的記憶涌來,這是我之前自己設置的😑,還有印象。

將之修改為 ...from all processes,點擊 OK 保存,這下總行了吧!

在 PyCharm 運行一下代碼,報異常:

requests.exceptions.SSLError: HTTPSConnectionPool(host='www.baidu.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)')))

證書問題,在代碼里設置一下 requests 的 verify 參數,關閉證書檢驗:

import requests

data = requests.get(url='https://www.baidu.com', verify=False,
                    proxies={'http': 'http://127.0.0.1:8888', 'https': 'http://127.0.0.1:8888'}).text
print(data)

再運行一下,終於獲取到了😭:

圖片

后記

筆者現在想起來了,原來是之前要用抓包的時候,要抓的 PyCharm 的都是 http 的包,以及一些瀏覽器插件的特殊需要,順帶可以不用為 https 請求的代碼設置 verify,所以就設置僅解密來自瀏覽器的 https 請求。

當時還稍微心理暗示了一下自己,要記得這里設置了僅瀏覽器,然而現在都忘了。

所以實際上,筆者抓不到的是 PyCharm 以及其它【非瀏覽器進程】的 【https 請求】

誒,自己挖的坑,噙着淚也要給它填上,僅以此文紀念此番逝去的記憶。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM