mitmproxy 不能自动抓取 app 接口数据,需手动配置网络、证书信任与流量路由;android/ios 证书安装及信任设置是关键,证书固定需 frida 等逆向绕过;mitmdump + python 脚本可实时过滤保存接口,但须避免阻塞代理;真机连不上多因网络不通或系统限制。

mitmproxy 本身不能直接“自动抓取 App 接口数据”,它只是透明代理,必须配合 App 的网络配置、证书信任、流量路由等手动干预才能生效;没有自动化魔法,所有“自动”都建立在你已稳定拦截到流量的基础上。
App 必须信任 mitmproxy 的 CA 证书才能解密 HTTPS 流量
Android 7+ 和 iOS 10.3+ 默认不信任用户安装的证书,App 还可能启用证书固定(Certificate Pinning),导致 mitmproxy 显示 502 Bad Gateway 或连接直接失败。
- Android:需将
~/.mitmproxy/mitmproxy-ca-cert.pem导入系统或用户证书存储,并在开发者选项中启用“HTTPS 代理”;对 targetSdkVersion ≥ 28 的 App,还需修改network_security_config.xml或用adb shell settings put global http_proxy配合 iptables 强制转发 - iOS:Safari 中打开
http://mitm.it下载并安装证书,再进入「设置 → 已下载描述文件 → 安装」,最后在「设置 → 关于本机 → 证书信任设置」中开启对 mitmproxy 证书的完全信任 - 遇到证书固定:无法绕过时只能逆向 App(如 Frida 注入 hook
X509TrustManager或OkHttpClient),mitmproxy 自身不提供绕过能力
用 mitmdump + Python 脚本实时过滤和保存接口请求
mitmdump 是 mitmproxy 的命令行模式,适合后台运行并交由自定义脚本处理流量;核心是编写一个 flow 处理函数,在每次请求/响应完成时触发。
例如只保存含 /api/v1/user 的 JSON 响应:
def response(flow):
if "api/v1/user" in flow.request.path and flow.response.headers.get("content-type", "").startswith("application/json"):
with open(f"dump_{flow.id}.json", "w") as f:
f.write(flow.response.text)
- 脚本保存为
dump_user.py,启动命令:mitmdump -s dump_user.py --set block_global=false -
block_global=false防止因 DNS 解析失败中断连接(尤其在非标准网络环境) - 不要在脚本里做耗时操作(如写磁盘、发网络请求),否则会阻塞代理;高频接口建议用队列+子线程异步落盘
-
flow.request.url是完整 URL,flow.request.query是解析好的 query dict,flow.request.json仅在 Content-Type 正确且可解析时可用
安卓真机上常见连不上 mitmproxy 的原因
不是 mitmproxy 配置问题,而是设备与代理主机之间的网络链路不通或被干扰。
- 手机和电脑不在同一局域网(比如手机用蜂窝网络、电脑连 WiFi)→ 必须共用同一路由器下的 WiFi
- 电脑防火墙拦截了 8080 端口(mitmproxy 默认端口)→ 检查 Windows Defender 防火墙或 macOS 防火墙设置,放行
mitmdump进程 - 手机 WiFi 设置里代理填了 IP 但端口错填成 8088 或漏填 → 应填电脑局域网 IP(如
192.168.1.100)和8080,类型选“手动” - 某些 Android 厂商(如华为、小米)系统级代理限制 → 尝试关闭「智能切换代理」或「Wi-Fi 优化」,或改用
adb reverse tcp:8080 tcp:8080反向代理(需 USB 调试)
真正难的从来不是写几行 Python 脚本,而是让目标 App 的每一个请求都老老实实走你的 mitmproxy——这取决于你对目标 App 的网络栈理解程度、系统版本限制、以及是否愿意投入时间做 Frida 绕过或 APK 重打包。别指望一个命令就“全自动抓包”。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











