【问题标题】:GitHub WebHook POSTs not going throughGitHub WebHook POST 未通过
【发布时间】:2013-05-10 13:53:26
【问题描述】:

我已经设置了 github webhooooks,以便在我推送到存储库时将 POST 发送到我服务器上的 PHP 脚本。 (https://help.github.com/articles/post-receive-hooks)

我的 PHP 脚本记录连接 IP,以及收到的有效负载:

$date = strftime('%c');
file_put_contents('log.txt', PHP_EOL.trim($date).PHP_EOL, FILE_APPEND);
try
{
  $payload = json_decode($_REQUEST['payload']);
}
catch(Exception $e)
{
  exit(0);
}

//LOG THE POST REQUEST
file_put_contents('log.txt', print_r($payload, TRUE), FILE_APPEND);

//EXECUTE A SCRIPT WHEN THE POST REQUEST IS INITIALIZED
if ($payload->ref === 'refs/heads/master')
{
  exec('deploy.sh >> log.txt');
}

从日志中,我可以看到当我推送到我的 repo 时连接了一个 IP,但没有记录任何 POST 数据。我使用 RequestBin 进行了测试,并确认存在 POST 数据。此外,如果我在 URL 中手动放置一个 $_GET 有效负载变量,则会记录下来(因为我正在检查 $_REQUEST 而不仅仅是 $_POST)。我怀疑我的 PHP 服务器被配置为拒绝来自其他服务器的 POST 请求。我正在使用 1and1 共​​享主机,所以我没有专门的控制,但我可以通过 SSH 登录,也可以使用 .ini 文件在本地配置 PHP 设置。任何建议将不胜感激!

*我不在乎我是用 PHP 还是其他语言来做这件事。如果您认为使用 Python 或其他东西可能会更容易,那也很酷。

-杰里米

【问题讨论】:

  • 如果您仍然遇到问题:我在 Dreamhost 上尝试了这段代码,没有file_put_contents,它工作得很好。您可能需要确保 1) JSON 解码不会因某种原因而失败(因为您只是静默退出),以及 2) 您没有权限错误或文件上的某些内容自行保存。 (我用mail 替换了file_put_contents,效果很好)
  • 我怀疑您的服务器拒绝来自其他服务器的发布请求。如果是这样,那么没有人可以在您的网站上发布任何内容。你试过吗:$json = file_get_contents ("php://input"); 然后用$payload = json_decode($json);加载json

标签: php post github git-post-receive


【解决方案1】:

您需要使用以下代码来获取 JSON 数据:

$data = json_decode( file_get_contents('php://input') );

如果您需要完整的解决方案;我找到了一些工具来帮助您从 Github 或 Gitlab 部署代码,因此我创建了 Deepl.io 来处理 Web-Hooks 并调用脚本以部署在您自己的服务器上。 这处理从 github 或 gitlab 发送的 JSON,可用于多个存储库和分支等。您可以在收到拉取通知后使用自己的 PHP 或 shell 脚本,并在每次部署后向您发送状态电子邮件... 看看吧:http://deepl.io

【讨论】:

    【解决方案2】:

    好的,我通过在进行 JSON 解码之前首先打印原始帖子数据来解决这个问题。原来我的 PHP 安装启用了魔术引号,并在 JSON 有效负载中的每个引号之前自动添加转义斜杠。显然,这使得 JSON 无效,结果导致 JSON_decode 出错。

    这是一个简单的解决方法:

    $payload = json_decode(stripslashes($_REQUEST['payload']));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 2020-03-01
      相关资源
      最近更新 更多