官网:https://mitmproxy.org/ 文档:https://docs.mitmproxy.org/stable/ mitmproxy is a free and open source interactive HTTPS proxy.
mitmproxy
不仅可以截获请求帮助开发者查看、分析,更可以通过自定义脚本进行二次开发。
我们可以批量拿到请求,然后根据自定义的python
脚本来进行解析与处理,实现高度定制化的需求。例如进行「埋点测试
」、「判断异常请求并发送邮件
」等等。
$ pip install mitmproxy
查看版本校验是否安装成功
(venv) (base) localhost:wytest zhongxin$ mitmdump --version
Mitmproxy: 7.0.4
Python: 3.8.3
OpenSSL: OpenSSL 1.1.1k 25 Mar 2021
Platform: macOS-10.16-x86_64-i386-64bit
安装证书
https://docs.mitmproxy.org/stable/concepts-certificates/
sudo security add-trusted-cert -d -p ssl -p basic -k /Library/Keychains/System.keychain ~/.mitmproxy/mitmproxy-ca-cert.pem
Mac配置代理
配置代理
其他环境的代理可以根据「安装证书」中的链接查看官方帮助文档
监听代码
# @File : test_mitmdump.py
import json
import time
import mitmproxy.http
with open('1.json', 'w') as f:
json.dump([], f) # 新建一个空列表json用于存放结果
class Demo:
def __init__(self):
self.other_data = None
def response(self, flow: mitmproxy.http.HTTPFlow):
url = flow.request.url
if 'trackh5.guahao.cn' not in url:
return
if 'trackh5.guahao.cn' in url: # 根据url地址判断是否要再次处理
# 埋点报文
query = flow.request.query
with open('1.json', 'r') as f:
d = json.load(f)
with open('1.json', 'w') as f:
data = {
"time": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), # 记录触发时间
"url": url,
}
try:
data["query"] = str(query)
except Exception:
pass
d.append(data)
json.dump(d, f)
addons = [
Demo(),
]
运行代码,可以方便调试
# @File : run.py
import sys
import os
from mitmproxy.tools.main import mitmdump
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
mitmdump(['-s', 'test_mitmdump.py'])
触发一次埋点后查看json文件中的内容:
[
{
"time": "2021-10-08 11:36:04",
"url": "https://trackh5.guahao.cn/blank.gif?pdata=pv_sid=0|pv_seq=1|channel=jlyh5|inchannel=|enc_user_id=89AB41A4C099101440A6821DB15F7FCAFFC3F8AB4CED97BF|uuid=6ba709723df10d66a5527706a20cd315|persession_id=1631689150059789338086|shortsession_id=1633627822175|user_id=CF5AA056D0070907CF7CB017A19FD143|open_id=23FE46EFC793433E|uid_cat=27|language=zh-cn|report_time=1633662887928|refer_url=|url=http%3A%2F%2Fm.guahao-test.com%2Foutpatient%2Flist%2Fsearch%3FpatientId%3D6E426275034A52E0401D6846A6B1FBC0%26doctorUserId%3D40A53CCE3BC3D37C22221289F37C26426844E653153C4B16%26sessionId%3D6115e37351a4da0001af1470|unique_id=1633662887928-1|acct_id=|track_souce=&ndata=id=|h=812|w=375|xp=html%3Ebody%3Ediv%5B1%5D%3Esection%3Ediv%5B3%5D%3Eul%3Ediv%5B20%5D%3Ep%5B2%5D%3Eimg|x=315|y=293|ct=d41d8cd98f00b204e9800998ecf8427e|oh=22|ol=299|ot=279.984375|ow=22",
"query": "MultiDictView[('pdata', 'pv_sid=0|pv_seq=1|channel=jlyh5|inchannel=|enc_user_id=89AB41A4C099101440A6821DB15F7FCAFFC3F8AB4CED97BF|uuid=6ba709723df10d66a5527706a20cd315|persession_id=1631689150059789338086|shortsession_id=1633627822175|user_id=CF5AA056D0070907CF7CB017A19FD143|open_id=23FE46EFC793433E|uid_cat=27|language=zh-cn|report_time=1633662887928|refer_url=|url=http://m.guahao-test.com/outpatient/list/search?patientId=6E426275034A52E0401D6846A6B1FBC0&doctorUserId=40A53CCE3BC3D37C22221289F37C26426844E653153C4B16&sessionId=6115e37351a4da0001af1470|unique_id=1633662887928-1|acct_id=|track_souce='), ('ndata', 'id=|h=812|w=375|xp=html>body>div[1]>section>div[3]>ul>div[20]>p[2]>img|x=315|y=293|ct=d41d8cd98f00b204e9800998ecf8427e|oh=22|ol=299|ot=279.984375|ow=22')]"
}
]
后续结合selenium即可完成埋点自动化测试