Perl:CGI脚本重试发送请求
我有一个旧的CGI Perl脚本,用于重试向目标服务器发送请求,直到成功为止。它早些时候在CentOS 5(perl 5.8.8)上工作。现在我想在CentOS 7(perl 5.16.3)上使用它,但它并没有像我所看到的那样工作。我不知道为什么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
- 它不会从请求中读取参数
- 它不会从请求中读取POSTDATA
- 它不会将任何日志写入给定的文件
- 或者修改脚本
- 或者找到另一个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才起作用”