我有github webhoooks设置为发送POST到我的服务器上的PHP脚本,当我推到回购。 (https://help.github.com/articles/post-receive-hooks)GitHub WebHook POSTs不通过
我的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');
}
从日志中,我可以看到,当我把我的回购协议的IP连接,但没有POST数据被记录。我使用RequestBin进行了测试,并确认POST数据存在。此外,如果我手动将一个$ _GET有效负载变量放在URL中,这是记录的(因为我正在检查$ _REQUEST而不是$ _POST)。我的怀疑是我的PHP服务器被配置为拒绝来自其他服务器的POST请求。我使用1and1共享主机,所以我没有专门的控制,但我可以通过SSH进入,并使用.ini文件在本地配置PHP设置。任何建议将不胜感激!
*我不在乎如果我在PHP或其他语言中这样做。如果您认为使用Python或其他方法可能更容易,那也很酷。
-Jeremy
如果你仍然有问题:我在Dreamhost上试过这个代码,没有'file_put_contents',它工作得很好。您可能需要确保1)由于某种原因,您的JSON解码不会失败(因为您只是静静地退出),并且2)您没有权限错误或文件上的某些内容保存。 (我用'mail'替换了'file_put_contents',它工作正常) – 2013-05-12 00:06:35
我怀疑你的服务器拒绝来自其他服务器的请求。如果是这样,那么没有人能够发布任何东西到您的网站。你试过了:'$ json = file_get_contents(“php:// input”);'然后用'$ payload = json_decode($ json)加载json;'' – MBeale 2013-05-14 17:08:25