天天看點

app小程式手機端Python爬蟲實戰14-mitmproxy抓包軟體詳解

作者:虛壞叔叔

早餐店不會開到晚上,想吃的人早就來了!😄

mitmproxy抓包軟體詳解

app小程式手機端Python爬蟲實戰14-mitmproxy抓包軟體詳解

講解​

​mumdump​

​,它的優勢是可以和Python腳本互動,我們來示範一下如何進行互動。

一、安裝mitmproxy

pip install mitmproxy -i https://pypi.douban.com/simple
pip install mitmproxy==5.0.1      

二、mitmdump加載端口和python腳本

cmd啟動​

​mitmdump​

mitmdump      
app小程式手機端Python爬蟲實戰14-mitmproxy抓包軟體詳解

如上提示的話就說明​

​mitmdump​

​​會監聽​

​8080​

​​端口,由于我們要監聽​

​fiddler​

​​的​

​8889​

​端口,就需要修改如下:

mitmdump -p 8889      
app小程式手機端Python爬蟲實戰14-mitmproxy抓包軟體詳解

如何能讓​

​mitmdump​

​​和​

​Python​

​進行互動呢?

可以加一個-s參數,去指定互動的​

​Python​

​​檔案,比如​

​test.py​

​,:

mitmdump -p 8889 -s test.py      
app小程式手機端Python爬蟲實戰14-mitmproxy抓包軟體詳解

這個​

​test.py​

​,需要自己編寫,它有固定的格式。

在​

​pycharm​

​​中建立​

​test.py​

​:

# 必須這麼寫 才能抓到資料包
def request(flow):
  print(flow.request.headers)      

此時,終端運作:

app小程式手機端Python爬蟲實戰14-mitmproxy抓包軟體詳解

可以看到,加載了test.py這個腳本。

三、啟動安卓模拟器用于抓包

一定要確定上節課設定為​

​手動​

​​代理,并且代理端口為​

​8889​

​:

app小程式手機端Python爬蟲實戰14-mitmproxy抓包軟體詳解

打開浏覽器,通路:

httpbin.org/get      

此時,可以看到這裡有一個​

​headers​

​,這裡列印出來的就是我們想要擷取的請求頭

print(flow.request.headers)      
app小程式手機端Python爬蟲實戰14-mitmproxy抓包軟體詳解

四、通過日志的形式輸出

這種方式可以更加明确的區分顔色

from mitmproxy import ctx
# 必須這麼寫 才能抓到資料包
def request(flow):
  #print(flow.request.headers)
  ctx.log.info(str(flow.request.headers))
  ctx.log.warn(str(flow.request.headers))
  ctx.log.error(str(flow.request.headers))      

指令行視窗将上一個捕獲結束掉,然後通過​

​mitmdump - p 8889 - s test.py​

​捕獲,接着在模拟器上用浏覽器再次通路網址

可以看到輸出了3段

app小程式手機端Python爬蟲實戰14-mitmproxy抓包軟體詳解

也可以擷取到請求的​

​url​

​:

from mitmproxy import ctx
# 必須這麼寫 才能抓到資料包
def request(flow):
  #print(flow.request.headers)
  ctx.log.error(str(flow.request.url))#url
  ctx.log.error(str(flow.request.host))#主機名
  ctx.log.error(str(flow.request.method))#請求方法
  ctx.log.error(str(flow.request.path))#請求路徑      

可以看到輸出了url

app小程式手機端Python爬蟲實戰14-mitmproxy抓包軟體詳解

既然會有請求函數,那麼也就有響應函數:

from mitmproxy import ctx
# 必須這麼寫 才能抓到資料包
def request(flow):
  #print(flow.request.headers)
  ctx.log.error(str(flow.request.url))
  
def response(flow):
  ctx.log.error(str(flow.response.status_code))      

指令行視窗将上一個捕獲結束掉,然後通過​

​mitmdump - p 8889 - s test.py​

​捕獲,接着在模拟器上用浏覽器再次通路網址

app小程式手機端Python爬蟲實戰14-mitmproxy抓包軟體詳解

可以看到列印了狀态​

​200​

from mitmproxy import ctx
# 必須這麼寫 才能抓到資料包
def request(flow):
  #print(flow.request.headers)
  ctx.log.error(str(flow.request.url))
  
def response(flow):
  ctx.log.error(str(flow.response.status_code))
  ctx.log.error(str(flow.response.text))      

五、總結

  • 本文介紹了Uiautomator2自動化抓取工具。