CGI Perl Echo回发应用程序/x-www-form-urlencoded Content

CGI Perl Echo回发应用程序/x-www-form-urlencoded Content,perl,cgi,mime-types,Perl,Cgi,Mime Types,我需要一个简单的基于CGI的Perl脚本来接收内容类型为application/x-www-form-urlencoded的帖子(直接,而不是从另一个HTML页面),并返回 我收到:(编码字符串) (如果可能的话) 已解码,字符串为:(已解码字符串) 我是CGI Perl新手,这是一个一次性的产品测试请求(我是系统管理员,不是程序员)。我打算在将来更深入地学习Perl,但在本例中,我希望有一个gimme 首先,我将快速浏览一些基础知识 以下是PERL/CGI应用程序包: use CGI; 要创

我需要一个简单的基于CGI的Perl脚本来接收内容类型为application/x-www-form-urlencoded的帖子(直接,而不是从另一个HTML页面),并返回

我收到:(编码字符串)

(如果可能的话) 已解码,字符串为:(已解码字符串)


我是CGI Perl新手,这是一个一次性的产品测试请求(我是系统管理员,不是程序员)。我打算在将来更深入地学习Perl,但在本例中,我希望有一个gimme

首先,我将快速浏览一些基础知识

以下是PERL/CGI应用程序包:

use CGI;
要创建CGI对象,请执行以下操作:

my $web = CGI->new;
在清除任何CGI数据以进行扩展流之前,请确保设置并写入HTTP头以进行扩展流。否则,最终将出现500个错误

要设置标题,请执行以下操作:

print $web->header();
print $web->header('application/x-www-form-urlencoded');
要从HTML接收任何post数据,例如

http://example.com?POSTDATA=helloworld
您可以使用param()函数:

my $data = $web->param('POSTDATA');
标量$data将设置为“helloworld”


建议在分配给标量之前检查是否定义了$web->param('POSTDATA')。

是CGI的良好开端。“直接接收帖子,而不是从另一个HTML页面接收帖子”-帖子请求就是帖子请求。服务器不关心是什么导致客户机生成它,除非您编写的显式检查引用方的代码(或者您使用类似于反CSRF的nonce)
CGI
是一个用Perl进行CGI的包。还有很多其他的,我会使用
Plack::Handler::CGI
,因为当我跳出CGI并使用体面的东西时,它更灵活。您不希望使用
application/x-www-form-urlencoded
作为返回数据的内容类型,这是表单将发布的格式,而不是发送回浏览器的有用内容。您的示例提供的数据是GET data,而不是POST。我认为POSTDATA不是专门用于application/x-www-form-urlencoded内容的。我读到的文档说,如果内容类型不是URL编码的,那么文本将被捕获到一个名为POSTDATA的参数中。我在这里错过了什么?@GreggLeventhal-你说得对,我以前没见过。显然,这就是在CGI.pm中获取原始POST数据的方式。遗憾的是,它没有使用合理的方法(比如使用不同的方法来调用它)。