免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4136 | 回复: 3
打印 上一主题 下一主题

求助cgi模块 在nginx + fcgi 服务中 get方式提交 正常 但是post数据后 param返回空的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-29 00:40 |只看该作者 |倒序浏览
本帖最后由 skylway 于 2013-12-29 00:45 编辑

急急! 这个问题困扰我了几天,百思不得其解!求高手相助》》》


perl cgi 模块中,我在apache上,测试下面代码可以正常显示提交的post数据,但是在nginx+fcgi 上显示不出post数据。如下面代码:



#!/usr/bin/perl
use CGI;
#use Encode qw(encode decode resolve_alias);
$query = new CGI;

print $query->header("text/html; charset=UTF-8");
print $query->start_html("The Object-Oriented CGI and Forms");
print "<H2>Example using Forms with Radio Buttons</H2>\n";
&print_formstuff($query);
&do_work($query)if ($query->param);
print $query->param;
print $query->end_html;
sub print_formstuff{
my($query) = @_;
print $query->startform(-method=>"post");
print "What is your name? ";
print $query->textfield('name'); # A simple text field
print "<BR>";
print "Select your favorite color? <BR>";
print $query->radio_group(-name=>'color',
-values=>[ 'red', 'green',
'blue','yellow' ],
-default=>'green',
-linebreak=>'true',
);
print $query->submit('action', 'submit');
print $query->reset('Clear');
print $query->endform;
print "<HR>\n";
}
sub do_work{
my ($query) = @_;
my (@values, $key);
                                                                                                                                                      
my ($query) = @_;
my (@values, $key);
print "<H2>Here are the settings</H2>";
foreach $key ($query->param()){
print "$key: \n";
@values=$query->param($key);
print join("&",@values), "<BR>";
}
}



$query->param 变量一直没返回真。没法do_work , 改成get方式,正常。
post的数据是正常上传到nginx,可以配置看到nginx上post的数据,但是cgi返回没有param。

求解求解。目前该cgi都没法返回,重装cgi也解不了。。。。唉。。。。。。。。。




1.png (1.57 KB, 下载次数: 55)

nginx post 数据

nginx post 数据

2.png (15.37 KB, 下载次数: 56)

抓包返回状态

抓包返回状态

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
2 [报告]
发表于 2013-12-29 08:20 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2013-12-29 09:26 |只看该作者
nginx不支持cgi, 兰州也没说他是用的什么方式运行的fcgi额, CGI这个模块在持久运行的情况下要调用个什么globalreset之类的方法吧

论坛徽章:
0
4 [报告]
发表于 2013-12-29 12:09 |只看该作者
排查源码发现,问题出在这里

#open $cgi_app, '-|', $req_params{SCRIPT_FILENAME}, $stdin_passthrough or print("Content-type: text/plain\r\n\r\n"); print "Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !\n"; # addlog($logfile, "Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !");

根据cgi post方式的定义,参数是通过stdin传递给cgi程序的,而作者这么写,实际是把参数放到了cgi程序的命令行参数,

修改为

open $cgi_app, '-|', "echo '$stdin_passthrough' | '$req_params{SCRIPT_FILENAME}'" or print("Content-type: text/plain\r\n\r\n"); print "Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !\n"; # addlog($logfile, "Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !");


解决了。太感谢大家了。
特别感谢laputa73!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP