做接口联调或排查线上问题时,一个好用的 mitmproxy 抓包 工具能让你看清每一次请求的真相。它是一款开源、跨平台、支持 HTTPS 解密的中间人代理,既能命令行交互,也能用 Python 脚本对流量做自动化改写。
一、mitmproxy 能解决什么问题
相比浏览器开发者工具只能看前端流量,mitmproxy 工作在应用层代理位置,可以拦截任意走系统代理的 HTTP/HTTPS 请求——包括移动端 App、命令行程序、微服务间调用。常见用途有:接口联调时 Mock 第三方返回、复现偶现 bug 时捕获真实报文、分析 App 的私有无文档接口。
二、安装与三种运行模式
一条命令即可安装:
# macOS / Linux
brew install mitmproxy
# 或使用 pip
pip install mitmproxy
mitmproxy 提供三种入口,按场景切换:
- mitmproxy:终端交互界面,实时查看、过滤、重放请求。
- mitmdump:无界面命令行,适合脚本化与服务器后台运行。
- mitmweb:带 Web 控制台的版本,界面更接近传统抓包工具。
三、HTTPS 解密:信任 CA 证书
HTTPS 流量默认是加密的,要让 mitmproxy 看到明文,需把它的根证书安装到客户端信任链。启动一次代理后,证书会自动生成:
# 浏览器访问该地址即可下载 CA 证书
http://mitm.it
# 或直接从配置目录取出
open ~/.mitmproxy/mitmproxy-ca-cert.pem
把证书导入系统钥匙串并设为”始终信任”,再将客户端代理指向 127.0.0.1:8080,即可看到解密后的明文请求。服务器侧的加固思路可参考我们的服务器安全加固实战。
四、用 Python 插件自动化改写流量
mitmproxy 的真正威力在于用 Python 脚本接管请求与响应。下面这个插件在请求发出前注入调试头,并在响应返回后改写状态码与正文:
from mitmproxy import http
class RewriteTraffic:
def request(self, flow: http.HTTPFlow):
# 发出前注入自定义请求头
flow.request.headers["X-Debug"] = "mitmproxy"
def response(self, flow: http.HTTPFlow):
# 对特定接口改写返回体
if "api/order" in flow.request.pretty_url:
flow.response.status_code = 200
flow.response.text = '{"mock": true, "data": []}'
addons = [RewriteTraffic()]
用 mitmdump -s rewrite.py 加载即可生效。结合API 调试工具选型与API 文档生成,可以搭建一套从抓包、Mock 到文档的闭环。
五、两个高频实战场景
场景一:Mock 第三方接口
联调时第三方服务不稳定?用上面的 response 钩子直接返回固定报文,本地开发不再被外部依赖卡住,也不污染真实环境。
场景二:排查移动端 HTTPS 流量
手机和电脑连同一 Wi-Fi,把手机代理设为电脑 IP:8080 并安装 CA 证书,就能在终端里看到 App 的全部请求,快速定位”为什么这个接口 403″。前端在浏览器侧的安全防护可对照前端安全 XSS/CSRF 防御。
六、常用命令速查
| 命令 | 作用 |
|---|---|
| mitmproxy -p 8080 | 在 8080 端口启动交互代理 |
| mitmdump -s a.py | 后台运行并加载脚本 a.py |
| mitmproxy -r flow.log | 回放已保存的流量文件 |
| ~/.mitmproxy/mitmproxy-ca-cert.pem | 导出的 CA 根证书路径 |
七、与同类工具对比
| 工具 | 收费 | 脚本化 | 适用 |
|---|---|---|---|
| mitmproxy | 免费开源 | 强(Python) | 开发者、自动化 |
| Charles | 商业 | 中 | 图形化调试 |
| Fiddler | 免费/商业 | 中(FiddlerScript) | Windows 生态 |
八、小结
mitmproxy 把”看流量”和”改流量”合二为一:HTTPS 解密让你看清报文,Python 插件让流量改写可编程、可复用。把它接入GitHub Actions 流水线,还能在 CI 中做接口契约校验。掌握它,接口联调与排障效率会明显上一个台阶。




