目标
当出问题的客户端是你无法下断点的移动应用或第三方集成时,最快的复现路径是录下它真实发出的内容。mitmproxy 挂在客户端与服务器之间,把每个请求与响应写进 flow 文件,之后可对任意环境回放这段精确序列。缺陷从一段口头描述变成可以循环重放直到必现的工件。
步骤要点
- 在复现用户旅程的同时启动 mitmdump -w session.flows 录制,请求会以单行摘要实时打印。
- 用 –view-filter “~u /api/checkout” 只看关键路径请求,拿到方法、状态码与大小的清单。
- 通过 redirect_to_staging.py 附件脚本把目标主机改写到预发环境,再以 mitmdump -n -r session.flows 顺序回放全部请求。
- 把回放进 for 循环跑 20 次,时序敏感的偶发问题会以可计量的复现率暴露,而不是模糊的“偶尔”。
- 记录下触发失败的那次循环编号,连同 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