【问题标题】:My CGI script not receiving custom headers我的 CGI 脚本没有收到自定义标题
【发布时间】:2016-08-17 13:25:59
【问题描述】:

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

但是,当我的 CGI 脚本运行时,我只能得到标准的标头。 X-SHOPIFY-HMAC-SHA256 在 Perl CGI 模块 http()%ENV 环境变量中都找不到。 (我读过How do I access the HTTP Header of request in a CGI script?How to fetch HTTP headers in perl when using CGI

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

【问题讨论】:

  • 您使用哪个网络服务器或框架?
  • 只是简单的 Apache 上的 Perl,没有框架。
  • 投反对票的人能否解释一下为什么他们认为我的问题不合适,并解释如何改进它?

标签: perl http-headers cgi shopify webhooks


【解决方案1】:

普通 apache 为 HTTP 标头设置环境变量。首先尝试不使用任何包装器。你也可以试试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

【讨论】:

  • 谢谢,这很有帮助。本地请求似乎有效。
  • 不确定它是什么,但这帮助我找到了它。可能是下划线/连字符问题。
  • 我也会使用 text/plain 而不是 text/html 作为内容类型。
  • 感谢@ikegami 的更正。通过智能手机写了答案,显然有一些错别字。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
  • 2015-04-14
  • 2014-06-15
  • 2022-01-22
  • 2019-06-17
相关资源
最近更新 更多