【问题标题】:How to get web hook data with GitHub using PHP如何使用 PHP 通过 GitHub 获取 Web 挂钩数据
【发布时间】:2017-10-21 08:19:14
【问题描述】:

我已经设置了一个 GitHub 网络钩子,其中包含一个秘密并为内容类型选择了 application/x-www-form-urlencoded。

我试图四处搜索,但似乎没有太多关于如何使用发布数据的信息,例如 GitHub 在 POST 请求中包含什么,我可以这样做:

$_POST["secret"] 或者还有更多?我知道我可以自己测试这个,但我设置 webhook 的方式很难看到输出,而且为 POST 做一个 var_dump() 更痛苦。

所以基本上我的问题是 GitHub 发送 POST 请求时的 POST 布局是什么,因为我希望验证推送了哪个分支并验证秘密。

【问题讨论】:

  • 你检查过the documentation吗?
  • @rickdenhaan github 文档没有说明如何在 PHP 中读取该标头(或任何标头)。和往常一样,php 在这种情况下对标头名称进行了一些操作。将其大写,并将- 替换为_(天知道还有什么),所以最终的PHP 名称实际上是$_SERVER['HTTP_X_HUB_SIGNATURE']
  • @hugyt7 顺便说一句,你可能会觉得这很有趣,这就是我使用 webhook 使开发网站始终与主 repo 保持同步的方式; pastebin.com/JcUevvP3
  • 文档确实说了以下内容:“application/x-www-form-urlencoded 内容类型会将 JSON 有效负载作为称为“有效负载”的表单参数发送。”所以$_POST['payload']中应该有一个JSON字符串@

标签: php git github webhooks


【解决方案1】:

好像被PHP翻译成$_SERVER['HTTP_X_HUB_SIGNATURE']

  • 但是如果对 PHP 将如何命名标题有疑问,请使用 <?php phpinfo(~0); 设置页面,并使用类似 curl http://ratma.net/phpinfo.php --header "X-Hub-Signature: test" -v 2>&1 | grep -i test 的 URL 运行 curl,您应该会看到标题的名称。在这种情况下,我得到了 <tr><td class="e">$_SERVER['HTTP_X_HUB_SIGNATURE']</td><td class="v">test</td></tr>

【讨论】:

  • 使用$_SERVER 访问HTTP 标头是一种解决方法。如果你在 Apache 上运行,你应该使用apache_request_headers()。 (或其别名getallheaders())这应该返回一个包含一个名为X-Hub-Signature的键的数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 2021-03-13
  • 1970-01-01
  • 2020-06-20
  • 2022-01-16
相关资源
最近更新 更多