Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:CGI脚本重试发送请求_Perl_Cgi - Fatal编程技术网

Perl:CGI脚本重试发送请求

Perl:CGI脚本重试发送请求,perl,cgi,Perl,Cgi,我有一个旧的CGI Perl脚本,用于重试向目标服务器发送请求,直到成功为止。它早些时候在CentOS 5(perl 5.8.8)上工作。现在我想在CentOS 7(perl 5.16.3)上使用它,但它并没有像我所看到的那样工作。我不知道为什么 它不会从请求中读取参数 它不会从请求中读取POSTDATA 它不会将任何日志写入给定的文件 在httpd错误日志中,我可以看到此日志(行参考可能不准确..): [10月9日星期五16:24:57.360265 2020][cgi:error][pi

我有一个旧的CGI Perl脚本,用于重试向目标服务器发送请求,直到成功为止。它早些时候在CentOS 5(perl 5.8.8)上工作。现在我想在CentOS 7(perl 5.16.3)上使用它,但它并没有像我所看到的那样工作。我不知道为什么

  • 它不会从请求中读取参数
  • 它不会从请求中读取POSTDATA
  • 它不会将任何日志写入给定的文件
在httpd错误日志中,我可以看到此日志(行参考可能不准确..):

[10月9日星期五16:24:57.360265 2020][cgi:error][pid 9574][client x、 x.x.x:39058]AH01215:在中使用未初始化值$postdata 在/var/www/cgi-bin/xcg.cgi第41行连接(.)或字符串

因此,我想:

  • 或者修改脚本
  • 或者找到另一个CGI脚本进行重试
剧本是:

#/usr/bin/perl-wT
严格使用;
使用警告;
使用CGI;
使用LWP::UserAgent;
使用POSIXQW(strftime);
使用IO::Handle;
my$today=strftime“%F”,localtime();
打开(my$log,“>>”,“/tmp/forwarder.log.$today”);
选择((选择($log),$|=1)[0]);
子日志{
打印$log strftime“%F%T@\n”,localtime();
}
我的$XCGclientur=”http://myserver/";
我的$retryTime=600;#秒
我的$retryCount=10;
my$q=CGI->新建;
my$postdata=$q->param('postdata');
my$ua=LWP::UserAgent->new;
我的$req=HTTP::Request->new(POST=>$xgclientur);
我的$reqString='';
#PID和当前时间的请求ID相当准确
我的$REQUID=$$。'。(strftime“%F%T”,localtime());
foreach my$key(排序(键(%ENV))){
如果($key=~m/^HTTP++$/){
$req->header($1=>$ENV{$key});
$reqString.=“$1:$ENV{$key}\n”;
}
}
$req->内容类型($q->内容类型);
$req->content($postdata);
$reqString.=“\n$postdata\n”;
日志(“收到的请求ID($reqID):\n$reqString\n”);
我的$stop=0;
我的$trys=1;
我的$pid=1;
我的$resp;
做{
$resp=$ua->请求($req);
my$code=$resp->{u rc};
如果($code==200){
打印$q->header(-type=>$resp->header(“内容类型”);
打印$resp->{u content};
logg(“处理请求ID($reqID)try#$trys成功\n”);
$stop=1;
}否则{
$pid=fork();
如果($pid==0){
打开(标准输入,“/dev/null”);
睡眠($retryTime);
++$trys;
如果($trys>$retryCount){
$stop=1;
}
}否则{
$stop=1;
打印$q->标题(-status=>200);
印刷‘其他东西’;
logg(“处理请求ID($reqID)try#$trys缓冲。服务器响应代码:$code\n”);
}
}
}而($stop==0);

服务器日志中的任何消息?Thx-我现在已经在描述中添加了该信息。
在连接(.)中使用未初始化值$postdata,或在/var/www/cgi-bin/xcg.cgi第41行使用字符串。
第41行是什么?
$postdata
的预期值是多少?第41行是
$reqString.=“\n$postdata\n”
所需的
$postdata
值是使用POST方法发送的数据。在我的测试中,它是由
curl-v-d'jfjawefjawoe'发送的一些字符http://...“
根据回答,只有当请求内容类型未设置为“multipart/form-data”时,POSTDATA才起作用。服务器日志中的任何消息?Thx-我现在已在说明中添加了该信息。
在串联中使用未初始化值$POSTDATA(.)或者位于/var/www/cgi-bin/xcg.cgi第41行的字符串。
第41行是什么?
$postdata
的预期值是多少?第41行是
$reqString.=“\n$postdata\n”
所需的
$postdata
值是使用POST方法发送的数据。在我的测试中,它是由
curl-v-d'jfjawefjawoe'发送的一些字符http://...“
根据答案,只有在请求内容类型未设置为“多部分/表单数据”时,POSTDATA才起作用”