【发布时间】:2019-01-07 01:06:29
【问题描述】:
我正在使用 Apache 和 Perl CGI 构建一个 Web 服务器,用于处理发送给它的 POST 请求。处理部分要求我从请求中获取完全未处理的数据并验证其签名。
客户端发送两种不同类型的 POST 请求:一种内容类型设置为application/json,另一种内容类型设置为application/x-www-form-urlencoded。
我能够使用cgi->param('POSTDATA') 获取application/json 数据。但是,如果我对application/x-www-form-urlencoded 数据(即cgi->param('payload'))执行相同操作,我会得到数据但它已经被解码。我想要原始 URL 编码格式的数据。即我想要客户端发送的未处理数据。
我这样做是为了验证 Slack 发出的请求。
【问题讨论】:
-
CGi.pm 不保存它在表单数据时收到的原始表单。
-
@ikegami 哎哟,那我就卡住了。如果我能得到它使用的编码,然后编码呢?如果是,如何获取客户端使用的编码类型?
-
不能,因为
abc=def和%61bc=def是编码abc=def的两种等效方式。您可以欺骗 CGI.pm 使其认为它不是表单数据,或者您可以避免使用 CGI.pm 并自己处理输入。 -
避免使用 CGI 模块。
-
@Borodin - 这不是很有帮助,因为有很多有用的功能。