gpt4 book ai didi

perl - 使用 FCGI 接受 POST 参数

转载 作者:行者123 更新时间:2023-12-01 10:32:27 27 4
gpt4 key购买 nike

我正在尝试使用 CGI 获取 URL 参数和 FCGI .

在我的浏览器上执行脚本时,我只获得了第一个请求的参数,但请求 $count 确实增加了。

use CGI;
use FCGI;

my $fcgiRequest = FCGI::Request();
while ($fcgiRequest->Accept() >= 0)
{
print("Content-type: text/html\r\n\r\n", ++$count);
my $q = new CGI;
print "name = " . $q->param("name") ;
print "\n";
}

最佳答案

您不能使用 CGI.pmFCGI.pm像这样在一起。您需要一些介于两者之间的胶水代码,因为 CGI 需要从环境中读取内容,而它不能以您调用它的方式进行。

有一个模块CGI::Fast包含在 Perl 中,它会为你做这件事。而不是使用 CGIFCGI ,你只需使用 CGI::Fast并更改一些代码。

use strict;
use warnings;
use CGI::Fast;

my $count;
while (my $q = CGI::Fast->new) {
# $q is a fresh CGI object for the current request

print("Content-type: text/html\r\n\r\n", ++$count);
print "name = " . $q->param("name") ;
print "\n";
}

如果您已经有一个 CGI 脚本,您可以将它放在一个函数中并在该循环内调用它。

如果您对 CGI::Fast 的工作原理感兴趣,请随时 take a look at its source code on CPAN .最主要的是环境和文件句柄(对于 STDOUT 和 STDERR)需要映射到每个新请求,而您的实现让 CGI 始终解析第一个请求。

请注意,我链接的 perldoc 和 CPAN 中的示例都非常过时,不代表现代 Perl 代码。


今天,您会 probably not use CGI不再存在,因为它已从当前的 Perl 版本中删除。相反,你可以看看 the PSGI interface specificationPlack关于如何实现它。这样做的好处是它提供了跨不同部署技术(例如 CGI 和 Fast CGI)的清晰接口(interface)。您可以让您的程序作为一个简单的 CGI 与 Apache 或 nginx 一起运行,或者作为一个持久的 FCGI 进程与 Apache 或其他网络服务器一起运行,或者作为一个独立的应用程序通过各种用 Perl 编写并为特定目的定制的 Plack 网络服务器运行。

关于perl - 使用 FCGI 接受 POST 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41223608/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com