mitmdump
是mitmproxy的命令行接口,比Fiddler、Charles等工具方便的地方是它能夠對接Python腳本。 有了它咱們能夠不用手動截獲和分析HTTP請求和響應,只需寫好請求和響應的處理邏輯便可。 它還能夠實現數據的解析、存儲等工做,這些過程均可以經過Python實現。python
使用命令git
mitmdump -w crawl.txt
複製代碼
其中 crawl.txt 能夠爲任意文件名,就能夠保存相應的結果了程序員
mitmdump -s script.py
複製代碼
script.py 文件中編寫以下代碼github
# 修改UA
def request(flow):
flow.request.headers['User-Agent'] = 'MitmProxy'
print(flow.request.headers)
複製代碼
在夜神模擬器中打開http://httpbin.org/get
出現以下內容 web
手機惠農APP
,看一下如何去捕獲相應的請求
這個地方千萬不要單獨依賴mitmdump,要不你會直接卡死的,你能夠採用mitmweb,打開APP以後,等待一會,點擊一個菜單進入。好比點擊下面的供應大廳。 mongodb
以後在mitmweb中捕獲到列表頁的數據鏈接,保存地址 https://truffle.cnhnb.com/banana/supply/query/list 方便進行後續的操做。腳本主要有兩部分構成,數據獲取與數據存儲,數據獲取要注意,當訪問的url匹配到剛纔的地址的時候,就表示能夠進行處理了json
from mitmproxy import ctx
import json
import pymongo
# def request(flow):
# #flow.request.headers['User-Agent'] = 'MitmProxy'
# print(flow.request.headers)
def response(flow):
start_url = "https://truffle.cnhnb.com/banana/supply/query/list"
response = flow.response
info = ctx.log.info
if flow.request.url.startswith(start_url):
text = response.text
data = json.loads(text)
save(data)
def save(data):
DATABASE_IP = '127.0.0.1'
DATABASE_PORT = 27017
DATABASE_NAME = 'sun'
client = pymongo.MongoClient(DATABASE_IP, DATABASE_PORT)
db = client.sun
db.authenticate("dba", "dba")
collection = db.huinong # 準備插入數據
print(data["data"]["datas"])
collection.insert_many(data["data"]["datas"])
複製代碼
注意,如今尚未設置手機自動操做,因此操做是我手動滑動的。左側數據已經成功的捕獲到了。python爬蟲
數據存儲到mongodb中,在處理就比較簡單了工具
mitmdump提供了專門的日誌輸出功能,能夠設定不一樣級別以不一樣顏色輸出結果。 ctx模塊有log功能,調用不一樣的輸出方法就能夠輸出不一樣顏色的結果,以方便咱們作調試。ui
ctx.log.warn(str(flow.request.query))
ctx.log.error(str(flow.request.headers))
複製代碼
更多的腳本例子,能夠去參考。
https://github.com/mitmproxy/mitmproxy/tree/master/examples/simple
後續,咱們將嘗試將剛纔的手動滑動修改爲自動操做......
歡迎關注 非本科程序員 公衆帳號