← 中文资源

简体中文版本

用 mitmproxy 录制并回放 HTTP 流量

用 mitmproxy 把真实客户端流量录成 flow 文件,编辑选定请求后对预发环境确定性回放,稳定复现缺陷。

阅读英文原文

目标

当出问题的客户端是你无法下断点的移动应用或第三方集成时,最快的复现路径是录下它真实发出的内容。mitmproxy 挂在客户端与服务器之间,把每个请求与响应写进 flow 文件,之后可对任意环境回放这段精确序列。缺陷从一段口头描述变成可以循环重放直到必现的工件。

步骤要点

  1. 在复现用户旅程的同时启动 mitmdump -w session.flows 录制,请求会以单行摘要实时打印。
  2. 用 –view-filter “~u /api/checkout” 只看关键路径请求,拿到方法、状态码与大小的清单。
  3. 通过 redirect_to_staging.py 附件脚本把目标主机改写到预发环境,再以 mitmdump -n -r session.flows 顺序回放全部请求。
  4. 把回放进 for 循环跑 20 次,时序敏感的偶发问题会以可计量的复现率暴露,而不是模糊的“偶尔”。
  5. 记录下触发失败的那次循环编号,连同 flow 文件一起作为缺陷的精确复现步骤。

排错提示

客户端不信任代理证书就先安装 mitmproxy 的 CA 证书,或测试期间允许跳过校验;录制里的令牌过期导致回放 401,可在附件脚本里换成预发长效令牌;回放含写操作会污染数据,务必指向可重置的一次性环境,绝不向生产回放写流量。

适用边界

录制与回放之间时间流逝、服务端状态变化,时间敏感的行为在回放时可能表现不同;WebSocket 与 HTTP/2 推送流虽能被捕获,但回放保真度低于普通请求响应流。

代码示例

# Record
mitmdump -w session.flows

# Replay against another host with an addon
mitmdump -n -s redirect_to_staging.py -r session.flows