我有可以在我的localhost上运行的CGI代理,但是当我尝试让它在另一台服务器上运行时,我得到了脚本头的过早结束。我在下面列出了来源。我也试过print header而不是text / xml,它使用localhost但是它在服务器上失败了。
use strict;
#use warnings;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use HTTP::Request::Common qw(POST);
use HTTP::Request::Common;
use LWP::UserAgent;
use URI::Escape;
use Data::Dumper;
my $url = param('url');
sub writeXML($) {
my $response = shift @_;
if ($response->is_success) {
print CGI->header('text/xml');
print $response->content;
print STDERR "content response:#" . $response->content . "#\n";
}
else {
print STDERR "Status Code: " . $response->status_line . "\n";
print STDERR Dumper ($response);
}
}
sub makeRequest(){
if ($url){
my $ua = LWP::UserAgent->new;
my $response = $ua->request(GET $url);
if ($response){
writeXML($response);
}
else{
print STDERR "No response exists";
}
}
else{
print STDERR "URL must be specified";
}
}
makeRequest();
0;
__END__
答案 0 :(得分:1)
当我从命令行尝试时,脚本“有效”:
$ t.pl url=http://www.unur.com/
给了我网站的主页。
这意味着,您尝试此操作的主机缺少一些库。要弄清楚哪些,你应该检查服务器的错误日志,或者尝试从shell运行你的脚本,如上所示。
请参阅DEBUGGING。
PS:makeRequest
和writeXML
上的原型绝对没有充分的理由。另外,请尝试warn sprintf "Status: %s\n", $response->status_line;
而不是那些不雅观的print STDERR
行。
答案 1 :(得分:1)
请参阅我的Troubleshooting Perl CGI scripts指南,了解查找问题所能完成的所有步骤。
答案 2 :(得分:0)
如果程序成功,您只输出一个标题,所有错误条件都会导致脚本标题过早结束。
放一个'print CGI-> header();'并且在向STDERR输出错误消息的所有点处向STDOUT发出一条合适的错误消息,您将看到出现了什么问题。