我的 CGI 脚本没有收到自定义 headers

My CGI script not receiving custom headers

我正在编写一个 CGI 脚本(Apache 上的 Perl,没有其他框架),它应该是一个 webhook 端点。技术细节是它应该从 Shopify 商店接收事件,但那是 semi-irrelevant。 Shopify 告诉我,为了验证 webhook 来自他们,我需要使用他们提供的密钥计算 HMAC,并确保它与 X-SHOPIFY-HMAC-SHA256 header 中的值匹配。我使用 requestb.in 查看发送的 webhook,我可以验证他们使用的 http 客户端是否正在发送 X-header.

然而,当我的 CGI 脚本运行时,我只得到 bog-standard headers。 X-SHOPIFY-HMAC-SHA256 在 Perl CGI 模块 http()%ENV 环境变量中均未找到。 (我看了 and )

我正在使用 cgiwrap 来获得我的脚本额外权限,但这不应该阻止我看到 headers 对吗?

普通 apache 为 HTTP headers 设置环境变量。首先尝试不使用任何包装器。您也可以尝试 printenv.cgi:

#!/usr/bin/perl
use Data::Dumper;

print "Content-type: text/plain\r\n\r\n".Dumper(\%ENV);

手动调用 printenv 或您的脚本以检查调用者是否可能导致问题:

curl -H "Foo: Bar" http://localhost/cgi-bin/printenv.cgi

如果您的脚本被调用为 API,您可能还想转储到文件中。

另见 http://httpd.apache.org/docs/current/howto/cgi.html