为什么我的CGI代理会收到“脚本标题的过早结束”?

时间:2010-01-29 18:51:21

标签: perl proxy cgi header

我有可以在我的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__

3 个答案:

答案 0 :(得分:1)

当我从命令行尝试时,脚本“有效”:

$ t.pl url=http://www.unur.com/

给了我网站的主页。

这意味着,您尝试此操作的主机缺少一些库。要弄清楚哪些,你应该检查服务器的错误日志,或者尝试从shell运行你的脚本,如上所示。

请参阅DEBUGGING

PS:makeRequestwriteXML上的原型绝对没有充分的理由。另外,请尝试warn sprintf "Status: %s\n", $response->status_line;而不是那些不雅观的print STDERR行。

答案 1 :(得分:1)

请参阅我的Troubleshooting Perl CGI scripts指南,了解查找问题所能完成的所有步骤。

答案 2 :(得分:0)

如果程序成功,您只输出一个标题,所有错误条件都会导致脚本标题过早结束。

放一个'print CGI-> header();'并且在向STDERR输出错误消息的所有点处向STDOUT发出一条合适的错误消息,您将看到出现了什么问题。