摘要:配合安卓模擬器有了前文的鋪墊,在加上以前對(duì)和的學(xué)習(xí),和模擬器連接操作就非常容易了。配置模擬器的代理,指向電腦,同時(shí)端口為。
本篇博客為大家介紹 mitmproxy
,該工具與 Charles
和 Fiddler
實(shí)現(xiàn)的功能類似,都可以輔助我們分析接口。
mitmproxy
是一個(gè)免費(fèi)且開源的交互式 HTTPS 代理,在爬蟲領(lǐng)域一般將其用作手機(jī)模擬器,無頭瀏覽器,可以用它作為代理去攔截爬蟲獲取到的數(shù)據(jù)。
mitmproxy
可以與 fiddler
工具一樣,安裝一個(gè)客戶端進(jìn)行操作,地址如下:
官網(wǎng)地址:https://mitmproxy.org/
6.0版本下載地址:https://mitmproxy.org/downloads/#6.0.2/
需要特殊的手段進(jìn)行訪問,國內(nèi)已經(jīng)將其地址屏蔽。
下載的最新 Windows Installer
版本即可(由于我電腦使用的是 Windows7 操作系統(tǒng),顧下載 6.0 版本),其文檔說明也非常清楚:https://docs.mitmproxy.org/stable/
安裝完畢,會(huì)自動(dòng)運(yùn)行控制臺(tái),啟動(dòng) mitmproxy ui
。
通過瀏覽器訪問上述地址,得到如下界面。
如果出現(xiàn)如下異常 缺少 api-ms-win-core-path-l1-1-0.dll ,打開下述鏈接下載 dll 組件即可。
https://download.csdn.net/download/hihell/38146147
接下來設(shè)置一下瀏覽器代理,是數(shù)據(jù)通過監(jiān)聽端口,按照如下步驟操作即可。
除此之外,為了捕獲 HTTPS
協(xié)議的請(qǐng)求,還需要安裝證書,在瀏覽器打開 http://mitm.it/
下載 Windows 證書即可,下圖就是抓取成功時(shí)候的樣子。
證書也可以在目錄
C:/Users/Administrator/.mitmproxy
查找,Windows 下選擇mitmproxy-ca-cert.p12
。
關(guān)閉瀏覽器和控制臺(tái)之后,再次啟動(dòng)只需要在控制臺(tái)輸入 mitmweb
即可實(shí)現(xiàn),還有一種啟動(dòng)方式,使用 mitmdump
,實(shí)現(xiàn)效果如下所示,該形式與 mitmweb
的差異是展示載體不一致,即一個(gè)是在網(wǎng)頁端,一個(gè)是在控制臺(tái)。
有了前文的鋪墊,在加上以前對(duì) fiddler
和 Charles
的學(xué)習(xí),mitmproxy
和模擬器連接操作就非常容易了。
配置模擬器的 Wlan 代理,指向電腦 IP,同時(shí)端口為 8080。
將證書 mitmproxy-ca-cert.cer
或者 mitmproxy-ca-cert.pem
拖拽到模擬器中,然后安裝證書(如無法雙擊安裝,通過【設(shè)置】->【安全】安裝即可),完成以上操作之后,只需要通過模擬器訪問百度,查看是否捕捉到數(shù)據(jù)請(qǐng)求即可。
僅使用如上功能是遠(yuǎn)遠(yuǎn)不夠的,我們看中的是 mitmproxy
可以實(shí)現(xiàn)腳本二次開發(fā),所以下面在 python 環(huán)境中安裝 mitmproxy
庫,實(shí)現(xiàn)其擴(kuò)展功能。
使用 pip install mitmproxy
即可實(shí)現(xiàn)該庫的安裝,mitmproxy
要求 python 最低版本是 python3.8
,所以安裝前需要確定你的 Python 版本是否滿足要求(實(shí)測(cè) Python3.7 也安裝成功了)。
安裝過程中,發(fā)現(xiàn) pyperclip
無法安裝成功,解決辦法是下載其 tar.gz 文件,解壓之后,使用 python setup.py install
進(jìn)行本地安裝。
mitmproxy
包含的模塊比較多,其中任意模塊失敗,都無法安裝成功。
Successfully installed Brotli-1.0.9 Jinja2-2.11.3 MarkupSafe-2.0.1 Werkzeug-1.0.1 asgiref-3.3.4 certifi-2021.10.8 cffi-1.15.0 click-7.1.20 hpack-4.0.0 hyperframe-6.0.1 itsdangerous-1.1.0 ldap3-2.8.1 mitmproxy-5.3.0 msgpack-1.0.2 passlib-1.7.4 protobuf-3.13.0 publicsuffix2-22.21 pydivert-2.1.0 pyparsing-2.4.7 ruamel.yaml-0.16.13 ruamel.yaml.clib-0.2.6 six-1.16.0 sortedcontainers-2.2.2 tornado-6.1 typing-exten
mitmproxy 官方提供了非常多參考案例
例子查看網(wǎng)址:https://docs.mitmproxy.org/stable/addons-examples/
你學(xué)習(xí)的第一個(gè)案例,就是修改 requests
請(qǐng)求,創(chuàng)建一個(gè)名稱為 script.py
的文件,編寫如下代碼:
import mitmproxy.httpdef request(flow: mitmproxy.http.HTTPFlow): flow.request.headers["User-Agent"] = "MitmProxy" print(flow.request.headers)
在控制臺(tái)使用 mitmdump -s script.py
啟動(dòng)文件,并開啟瀏覽器代理,訪問 http://httpbin.org/get
,此時(shí)就會(huì)發(fā)現(xiàn)用戶代理已經(jīng)被我們成功修改。
還可以將多個(gè)方法合并在一個(gè)類中,然后再通過 addons
變量進(jìn)行綁定,例如官方提供的案例。
from mitmproxy import ctxclass Counter: def __init__(self): self.num = 0 def request(self, flow): self.num = self.num + 1 ctx.log.info("We"ve seen %d flows" % self.num)addons = [ Counter()]
在命令行重啟 mitmproxy
,刷新瀏覽器獲取如下內(nèi)容。
這里還需要了解的就是為了實(shí)現(xiàn) mitmproxy
與 python
之間的交互,有一些固定名稱的函數(shù)需要記憶一下。
def http_connect(self, flow: mitmproxy.http.HTTPFlow)
:與服務(wù)器建立連接;def requestheaders(self, flow: mitmproxy.http.HTTPFlow)
:客戶端的 HTTP 請(qǐng)求的頭部被成功讀取,請(qǐng)求 body 沒有讀??;def request(self, flow: mitmproxy.http.HTTPFlow)
:客戶端的 HTTP 請(qǐng)求被成功完整讀??;def responseheaders(self, flow: mitmproxy.http.HTTPFlow)
:服務(wù)器返回的響應(yīng)頭被讀取,響應(yīng) body 還沒有返回;def response(self, flow: mitmproxy.http.HTTPFlow)
:響應(yīng)完整返回;def error(self, flow: mitmproxy.http.HTTPFlow)
:異常狀態(tài)。這里對(duì)具體細(xì)節(jié)的 API 不做過多的說明,都可以從手冊(cè)查閱出來,官方手冊(cè):https://docs.mitmproxy.org/stable/api/events.html
本次實(shí)現(xiàn)的爬蟲案例是,訪問 CSDN 任意博主的粉絲列表,在控制臺(tái)打印出粉絲數(shù)據(jù)(隱私問題,沒有存儲(chǔ))。
那官方博客測(cè)試,發(fā)現(xiàn)接口如下:
https://blog.csdn.net/community/home-api/v1/get-fans-list?page=4&size=20&noMore=false&blogUsername=blogdevteam
請(qǐng)求方式為 get ,請(qǐng)求地址為 https://blog.csdn.net/community/home-api/v1/get-fans-list
,修改 script.py
文件代碼如下:
from mitmproxy import ctximport jsondef response(flow): start_url = "https://blog.csdn.net/community/home-api/v1/get-fans-list" response = flow.response if flow.request.url.startswith(start_url): text = response.text data = json.loads(text) print(data)
或者使用如下代碼,也可以實(shí)現(xiàn)相同的效果。
import jsonclass GetFans(object): def response(self, flow): start_url = "https://blog.csdn.net/community/home-api/v1/get-fans-list" response = flow.response if flow.request.url.startswith(start_url): text = response.text data = json.loads(text) print(data)addons = [ GetFans()]
這時(shí)候,如果我們能實(shí)現(xiàn)自動(dòng)化下拉頁面,是不是就能實(shí)現(xiàn)一個(gè)自動(dòng)化的爬蟲了呢???
今天是持續(xù)寫作的第 267 / 365 天。
可以關(guān)注我,點(diǎn)贊我、評(píng)論我、收藏我啦。
更多精彩
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/125083.html
摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:支持全平臺(tái)的安裝,我們直接從的里面安裝即可,鏈接為。平臺(tái)可以下載安裝包如,平臺(tái)可以下載安裝包如,平臺(tái)可以選擇下載源碼,但是更推薦用下文的安裝方式。上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)爬取相關(guān)庫的安裝的安裝下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)爬蟲框架的安裝 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---8、APP爬取相關(guān)庫的安裝:MitmProxy的安裝下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---10、爬蟲框架的安裝...
摘要:還有一個(gè)大坑,就是如果你的機(jī)子是安卓而是系統(tǒng)其他系統(tǒng)沒測(cè)試過的話,安裝了證書也是沒用的,在進(jìn)行抓包的時(shí)候還是會(huì)提示證書有問題。 學(xué)會(huì)如何抓包,是爬蟲的必備技能,甚至可以說,不會(huì)抓包就等同于不會(huì)爬蟲。 那我們?cè)鯓幼グ兀咳绻苯幼トg覽器上的內(nèi)容,可以直接使用開發(fā)者工具進(jìn)行抓包,但有個(gè)局限,只能抓瀏覽器的,功能也沒有多少。還可以使用別的工具,比如 mitmproxy、charles,當(dāng)然...
閱讀 2992·2021-11-25 09:43
閱讀 3638·2021-08-31 09:41
閱讀 1251·2019-08-30 15:56
閱讀 2139·2019-08-30 15:55
閱讀 3002·2019-08-30 13:48
閱讀 2821·2019-08-29 15:15
閱讀 991·2019-08-29 15:14
閱讀 2663·2019-08-28 18:26