首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FCGI接受POST参数

使用FCGI接受POST参数
EN

Stack Overflow用户
提问于 2016-12-19 21:24:44
回答 2查看 1.2K关注 0票数 3

我正在尝试使用CGIFCGI获取URL参数。

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

代码语言:javascript
复制
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";
}
EN

回答 2

Stack Overflow用户

发布于 2016-12-19 21:43:25

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

Perl附带了一个模块CGI::Fast,它可以为您完成这项工作。您只需使用CGI::Fast并更改一点代码,而不使用CGIFCGI

代码语言:javascript
复制
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)的清晰接口。您可以让您的程序在Apache或nginx上作为简单的CGI运行,或者在Apache或其他let服务器上作为持久的FCGI进程运行,或者通过用Perl编写并为特定目的定制的各种Plack let服务器作为独立应用程序运行。

票数 4
EN

Stack Overflow用户

发布于 2016-12-20 03:55:18

一旦为一个请求创建了一个CGI.pm对象,它就会被重用。

您可以通过在循环末尾添加以下内容来重置CGI.pm:

代码语言:javascript
复制
CGI::_reset_globals();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41223608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档