如何用Postman模拟带GitHub Payload的Webhook请求至本地Probot应用?
解决Probot Webhook签名不匹配问题
你遇到的错误是因为Probot会验证Webhook请求的签名,确保请求来自GitHub。要在Postman里模拟成功,除了正确的Header和Body,关键是要生成并添加符合要求的签名头,具体步骤如下:
- 确保Payload完全一致:从GitHub复制的Webhook payload必须原封不动粘贴到Postman的Body(选raw -> JSON格式),不能有任何多余的空格、换行或修改,否则签名会不匹配。
- 生成正确的X-Hub-Signature-256头:
- 拿你.env文件里的
WEBHOOK_SECRET作为密钥,对完整的payload内容做HMAC SHA256哈希计算。 - 把计算出的哈希值转成十六进制字符串,然后拼接成
sha256=你的十六进制哈希值格式。 - 在Postman的请求头里添加
X-Hub-Signature-256字段,值就是上面生成的字符串。
- 拿你.env文件里的
- 检查其他必填请求头:
- 必须添加
X-GitHub-Event头,值设为issues(对应你监听的issues.opened事件)。 - 确保
Content-Type头设为application/json。
- 必须添加
如果手动计算签名容易出错,可以用Postman的Pre-request Script自动生成:
// 先把WEBHOOK_SECRET存到Postman环境变量里 const secret = pm.environment.get("WEBHOOK_SECRET"); const payload = pm.request.body.raw; const hmac = CryptoJS.HmacSHA256(payload, secret); const signature = `sha256=${hmac.toString(CryptoJS.enc.Hex)}`; // 自动添加签名头 pm.request.headers.add({ key: "X-Hub-Signature-256", value: signature });
这样配置后,Postman发送的请求就能通过Probot的签名验证,触发你的issue回复逻辑了。
内容的提问来源于stack exchange,提问作者Szymskiii
相关产品推荐
相关产品推荐

