mitmproxy抓包 | Python實(shí)時(shí)生成接口自動(dòng)化用例
抓包工具mitmproxy | mitmweb基本用法(二)
前面已經(jīng)給大家分享了mitmproxy的環(huán)境配置和基本使用,文章瀏覽量很高,相信對(duì)抓包工具感興趣的朋友,已經(jīng)熟練運(yùn)用起來(lái)了。
這期給大家分享下mitmproxy結(jié)合python腳本對(duì)抓包信息的(請(qǐng)求頭、請(qǐng)求頭、接口url、請(qǐng)求方式、響應(yīng)頭、響應(yīng)體等)進(jìn)行監(jiān)控,實(shí)時(shí)抓取數(shù)據(jù)并存儲(chǔ)到文件里,實(shí)現(xiàn)了接口自動(dòng)化測(cè)試中的接口用例設(shè)計(jì)自動(dòng)化,無(wú)需花費(fèi)大量時(shí)間手動(dòng)編寫接口用例,大大提高了工作效率,相信很多人看到這里已經(jīng)欣喜難耐了,一定要關(guān)注下方公眾號(hào),有更多精彩技術(shù)文章。
一、mitmproxy介紹
mitmproxy是Python編寫的一款功能完善的代理工具,mitmproxy是一款支持?jǐn)r截HTTP和HTTPS請(qǐng)求和響應(yīng)并即時(shí)修改它們的交互式中間人代理工具。最強(qiáng)大之處在于對(duì)python腳步的支持,它提供了Python API給開發(fā)者編寫插件用來(lái)自定義對(duì)流量進(jìn)行處理和修改,可以在python代碼中直接處理數(shù)據(jù)包。
二、mitmproxy的功能:
1、攔截HTTP和HTTPS請(qǐng)求和響應(yīng)
2、保存HTTP會(huì)話并進(jìn)行分析
3、模擬客戶端發(fā)起請(qǐng)求,模擬服務(wù)器端返回響應(yīng)
4、利用反向代理將流量轉(zhuǎn)發(fā)給指定的服務(wù)器
5、支持Mac和linux上的透明代理
6、利用Python對(duì)HTTP請(qǐng)求與響應(yīng)進(jìn)行實(shí)時(shí)處理
三、環(huán)境
1、部署python環(huán)境
2、安裝mitmproxy,pip install mitmproxy
mitmproxy提供了HTTP、WebSocket、TCP事件。本次只考慮HTTP事件,HTTP事件提供一些api,詳情參考https://docs.mitmproxy.org/stable/addons-events/
四、啟動(dòng)web抓包,抓包信息全量存入文件
1、cmd下執(zhí)行:
mitmweb -p 8889 -w C:\Users\la\Desktop\test.txt
啟動(dòng)抓包服務(wù),實(shí)時(shí)抓取全量數(shù)據(jù)存入文件

2、自動(dòng)打開web抓包頁(yè)面

3、邊抓包,邊將抓包的全量信息實(shí)時(shí)存入文件

五、腳本
編寫python腳本,獲取接口(請(qǐng)求頭、請(qǐng)求頭、接口url、請(qǐng)求方式、響應(yīng)頭、響應(yīng)體等)需要的信息,腳本變更,保存后實(shí)時(shí)同步,無(wú)需重新啟動(dòng)抓包服務(wù)
import mitmproxy.httpimport csv,jsonclass CaptureInfoWriteFile:def __init__(self):passdef request(self, flow: mitmproxy.http.HTTPFlow):flow_request = flow.request # 獲取請(qǐng)求對(duì)象self.url = flow_request.url # 接口urlself.host = flow_request.host # 域名self.path = flow_request.path # 接口地址self.method = flow_request.method # 請(qǐng)求方式self.content = flow_request.contentself.timestamp_start = flow_request.timestamp_start # 請(qǐng)求開始時(shí)間戳self.timestamp_end = flow_request.timestamp_end # 請(qǐng)求結(jié)束時(shí)間戳self.header = flow_request.headers # 請(qǐng)求頭self.text = flow_request.text # 請(qǐng)求體def response(self, flow: mitmproxy.http.HTTPFlow):flow_response = flow.response # 獲取響應(yīng)對(duì)象response_status_code = flow_response.status_code # 響應(yīng)狀態(tài)碼response_text = flow_response.text # 響應(yīng)體response_content = flow_response.contentresponse_timestamp_start = flow_response.timestamp_start # 響應(yīng)開始時(shí)間response_timestamp_end = flow_response.timestamp_end # 響應(yīng)結(jié)束時(shí)間response_header = flow_response.headers # 響應(yīng)頭with open(r'C:\Users\xia\Desktop\test15.csv', 'a+',newline='') as f:f_csv = csv.writer(f)f_csv.writerows([[self.url, self.host, self.path, self.method, self.header, self.text, response_status_code, response_header, response_text]])addons = [CaptureInfoWriteFile()]
六、啟動(dòng)web抓包,調(diào)用python腳本
1、cmd下執(zhí)行:
mitmweb -p 8889 -s C:\Users\xia\Desktop\test_maplocal.py
啟動(dòng)抓包服務(wù),實(shí)時(shí)監(jiān)控獲取抓包信息

2、自動(dòng)打開web抓包頁(yè)面

3、邊抓包,邊調(diào)用python腳本,將獲取的抓包信息實(shí)時(shí)存儲(chǔ)到文件里,方便接口自動(dòng)測(cè)試使用

