抓包分析:DevTools 与 mitmproxy
前置知识
本文基于模型知识整理,建议核对官方文档(见 参考资料)。
一句话定义
抓包是观察「浏览器到底发了哪些请求、带了什么参数」的过程,DevTools 覆盖网页流量,mitmproxy 覆盖 App 流量,分析结论直接变成爬虫代码。
为什么重要
接口路线(效率最优路线)的全部输入来自抓包:URL、方法、参数、关键头。抓包能力弱的人只能盲目试错,抓包能力强的人十分钟内定下采集方案。
前置知识
kp-002(报文模型)、kp-012(知道要看 XHR)。
核心概念
- Network 面板要素:过滤(Fetch/XHR/Doc)、
Preserve log(跳转不丢记录)、Disable cache、时间线(请求先后与阻塞)。 - Preview / Response:查看响应体;Initiator 列指出「谁发起了这条请求」。
- Copy as cURL:把请求一键复制成 curl 命令,是转成 requests 的桥梁。
- HAR:整页流量的 JSON 存档,可离线复查与分享。
- mitmproxy:中间人代理,配证书后可解 HTTPS;用于 App 或系统级流量。
原理与机制
标准分析流水:
1. 打开 Preserve log + Fetch/XHR 过滤 → 刷新页面复现操作
2. 按时间/大小定位目标响应 → Preview 确认含目标数据
3. Headers 页签抄录: URL·Method·Query·Body·Cookie·Referer·自定义头
4. Copy as cURL → 本地重放 → 确认可复现
5. 触发一次翻页/筛选 → diff 两请求参数 → 归纳参数规则
cURL 转 requests 的机械映射:
# curl 'https://api.example.com/list?page=2' -H 'referer: https://example.com' -b 'sid=abc'
import requests
r = requests.get("https://api.example.com/list", params={"page": 2},
headers={"Referer": "https://example.com"},
cookies={"sid": "abc"}, timeout=(5, 20))
mitmproxy 的用武之地:App 内嵌接口(无 DevTools 可用)。mitmproxy/mitmweb 启动代理 → 手机 WiFi 指向电脑 → 安装 mitmproxy 证书 → 流量按域名过滤审阅。注意:仅用于自有 App 或已授权测试。
实例或案例
某列表页筛选「价格区间」后数据变化:在 Preserve log 下操作一次筛选,diff 请求参数发现 minPrice/maxPrice 出现在 query——筛选能力直接变成接口参数,无需任何 UI 自动化。这是抓包价值的最小缩影:把界面操作翻译成参数组合。
常见误区
- 误区一:只看 Doc 类请求。 数据都在 Fetch/XHR;Doc 只有 HTML 壳。
- 误区二:漏抄关键头。 自定义头(
X-Token、sign)常是接口校验核心;cURL 复制法可避免手抄遗漏。 - 误区三:忽略请求顺序。 有的接口依赖前面请求种下的 Cookie/token;重放单条失败时,先看 Initiator 链。
自测题
- Preserve log 解决什么问题?
答:页面跳转/刷新会清空 Network 记录,勾选后跨跳转保留全部请求,便于追踪完整链路。
- Copy as cURL 的两个用途?
答:一键转成可重放的命令验证接口;避免手抄漏头,再机械翻译为 requests 代码。
- 什么时候必须用 mitmproxy 而不是 DevTools?
答:分析 App(无浏览器 DevTools)或系统级流量时,经中间人代理解密 HTTPS 审阅。
与其他知识点的关系
kp-009 消费抓包结论;kp-015 逆向上一步发现的加密参数;kp-013 的响应监听等价于「程序内实时抓包」。
延伸阅读
Chrome DevTools 官方文档「Inspect network activity」;mitmproxy 官方文档快速上手。