Webhook 请求结构解析
在对接第三方 API 或构建事件驱动的系统时,Webhook 是实现异步通知的核心机制。一个完整的 Webhook 请求通常由 HTTP 方法、请求头和请求体(Body)三部分组成。
- HTTP 方法:Webhook 发送方通常使用
POST、PUT或PATCH方法来推送数据,但在某些特定场景下也可能使用GET或DELETE。 - 请求头:承载了元数据,例如内容类型(
Content-Type)、客户端标识,以及用于安全校验的签名和时间戳。 - 请求体:包含事件的具体载荷(Payload)。请求体的格式通常为 JSON 或 URL 编码的表单数据。
理解并准确记录这些结构是排查 Webhook 接收端故障的第一步。
请求头在 Webhook 通信中的作用
请求头不仅决定了接收端如何解析请求体,还承载了安全和路由的关键信息。在 Webhook 通信中,以下两类请求头尤为重要:
- 内容类型声明:如
Content-Type: application/json或Content-Type: application/x-www-form-urlencoded,它直接决定了接收端解析器的工作模式。 - 安全签名与时间戳:为了防止重放攻击和数据篡改,发送方通常会在请求头中加入签名(如
X-Hub-Signature、X-Signature)和发送时的时间戳。
本工具在解析请求头时,支持最多 200 行非空请求头,且总字符数限制在 100,000 个字符以内。输入时需遵循每行一个请求头,且格式为“名称: 值”的规则。
Webhook 请求体格式与处理规则
不同的服务商会采用不同的数据格式来发送 Webhook 载荷。最常见的两种格式是 JSON 和 URL 编码表单(URL-encoded)。
本工具针对这两种格式提供了自动识别与格式化功能:
- JSON 格式:工具会使用
JSON.parse对其进行解析并重新排版。需要注意的是,此操作会重新调整字段的顺序,因此原始的空白字符和字段排列顺序将会丢失。如果 JSON 结构损坏,工具会提示错误:“请求体看起来是 JSON,但无法解析。” - URL 编码表单:工具会将其解码并格式化为易读的键值对。如果表单数据中存在不完整的百分号编码,则会触发错误:“表单请求体包含不完整的百分号转义。”
- 其他格式:对于 XML、二进制或纯文本等其他类型,工具不会进行格式化,而是保持其原始文本状态。
请求体的最大输入限制为 1,000,000 个字符。如果超出此限制,工具将显示错误:“请求体过长,请控制在 1,000,000 个字符以内。”
签名检测与真实性验证的区别
在检查 Webhook 请求时,识别安全相关的请求头是评估其安全性的第一步。本工具会通过名称模式(如 signature、hmac、digest 以及常见的时间戳命名)自动检索并列出请求头中存在的签名字段。
然而,检测到签名请求头并不等同于验证了请求的真实性。
- 工具的行为:仅检索并展示这些敏感请求头的存在,如果未发现,则显示“没有发现常见签名或 webhook 时间戳请求头。”
- 真正的验证:必须在您的后端服务器上执行。这需要获取发送方提供的签名密钥(Secret)或公钥,按照发送方指定的算法(如 HMAC-SHA256),对捕获的原始请求体字节流进行计算,并与请求头中的签名值进行比对。本工具不会执行任何密码学计算、算法模拟或重放窗口校验。
本地 cURL 测试命令生成
在开发和调试 Webhook 接收程序时,反复触发第三方的真实 Webhook 既耗时又难以控制变量。一种标准的实践是将捕获到的请求转化为本地 cURL 命令,在本地开发环境中进行模拟测试。
本工具在解析您输入的请求后,会自动生成一个标准的 shell 引用 cURL 命令。该命令具有以下特征:
- 固定目标地址:生成的 cURL 命令统一指向本地测试地址
http://localhost:3000/webhooks。 - 完整保留元数据:命令中会完整包含您输入的 HTTP 方法和所有有效的请求头。
- 携带请求体:如果输入了请求体,cURL 命令会通过相应的参数将其完整传递。如果请求体为空,输出部分则会显示“(请求体为空)”。
通过在终端运行此 cURL 命令,您可以直接向本地运行的 Webhook 处理器发送结构完全一致的请求,从而实现高效的本地断点调试。
隐私与本地处理说明
当您使用本工具检查敏感的 Webhook 请求(可能包含订单信息、用户数据或签名密钥)时,数据的安全性至关重要。
本工具的所有处理均在您的浏览器本地完成。您粘贴的方法、请求头和请求体数据不会被上传到 BroBroGo 的服务器,也不会被持久化存储。
常见问题
支持检查哪些 webhook 请求体?
本工具会识别并格式化 JSON 和 URL 编码表单;XML、multipart、二进制等其他内容按纯文本显示,不会擅自猜测格式。
找到签名字段是否证明请求是真实的?
不能。这里只会列出签名及相关时间戳请求头。真正的验证还需要发送方的签名规则、密钥或公钥,以及原始请求字节。
此页面可以接收实时 webhook 回调吗?
不能。请把已捕获的请求粘贴到这里检查。本页不会创建公网端点、接收回调或发送生成的测试请求。