753 字 ~ 2 分钟阅读

用一个二进制搞定 HTTP 捕获、回放与转发

日常调 Webhook 时,常常会同时遇到抓包、重放、转发和故障复现。
如果每一步都换一套工具,切换成本很高。

ReqTap 的好处是把「采集 + 存储 + Web 控制台 + 转发」合在一个可执行文件里,开箱就能用。

这篇文章整理的是我常用的一套流程。

ReqTap 是什么

ReqTap 是一个跨平台、零外部依赖的 HTTP 请求捕获与调试工具,核心能力包括:

  1. CLI 实时查看请求(彩色输出、结构化日志)
  2. 内置 SQLite 持久化(可检索、筛选、导出)
  3. Web 控制台实时观察(WebSocket 推送)
  4. 请求回放(改目标地址、Header、Body、Query 后重发)
  5. 多目标异步转发(超时、重试、并发控制)

它最大的优势是简单:不用额外搭数据库或消息队列。

安装方式(推荐顺序)

Homebrew(macOS 推荐)

1
2
brew tap funnyzak/reqtap
brew install reqtap

一键安装脚本(跨平台)

1
curl -fsSL https://raw.githubusercontent.com/funnyzak/reqtap/main/scripts/install.sh | bash

Docker

1
2
docker pull funnyzak/reqtap:latest
docker run -p 38888:38888 funnyzak/reqtap:latest

5 分钟上手

默认启动

1
reqtap

默认监听地址:http://0.0.0.0:38888/reqtap

发一个测试请求

1
2
3
curl -X POST http://localhost:38888/reqtap \
-H "Content-Type: application/json" \
-d '{"message":"Hello, ReqTap!"}'

打开 Web 控制台

默认访问:http://localhost:38888/web

登录后可以:

  1. 实时看流量
  2. 按方法/路径/关键词筛选
  3. 导出 JSON/CSV/TXT
  4. 发起请求回放

常用命令组合

修改端口与路径

1
reqtap --port 8080 --path /reqtap/

开启文件日志

1
reqtap --log-file-enable --log-file-path ./reqtap.log

转发到多个下游

1
2
3
reqtap \
--forward-url http://localhost:3000/webhook \
--forward-url https://api.example.com/ingest

控制存储策略

1
2
3
4
reqtap \
--storage-path /var/lib/reqtap/requests.db \
--storage-max-records 50000 \
--storage-retention 168h

实战里最关键的几个点

配置优先级

配置覆盖顺序是:

  1. 命令行参数
  2. 环境变量
  3. 配置文件
  4. 默认值

实操上很顺手:基础配置写 config.yaml,环境差异放环境变量,临时排查时再用命令行覆盖。

Path Strategy(转发路径策略)

入口路径和下游路径不一致时,ReqTap 提供三种策略:

  1. append:保留原始路径拼接转发
  2. strip_prefix:先移除监听前缀再转发
  3. rewrite:按规则重写路径(支持前缀/正则)

做路由迁移或多环境联调时,这个能力很实用。

Web 控制台账号安全

项目示例里会带默认账号,只适合本地体验。
实际使用时记得改掉默认凭据,并限制暴露范围。

适用场景建议

ReqTap 特别适合这些场景:

  1. Webhook 开发调试(GitHub / Stripe / Zapier / n8n)
  2. 服务入口流量采样与故障复现
  3. CI 里一次性流量捕获(配合 --json
  4. 设备或 SDK 上报数据的离线回放

如果你经常需要反复重放和对比 HTTP 请求,ReqTap 值得常驻工具箱。

参考