Почему я получаю «преждевременный конец заголовка скрипта» от моего CGI-прокси? - PullRequest
0 голосов
/ 29 января 2010

У меня есть CGI-прокси, который работает на моем локальном хосте, но когда я пытаюсь заставить его работать на другом сервере, я получаю преждевременный конец заголовка скрипта. Я включил источник ниже. Я также пробовал печатать заголовок вместо 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 ]

1 голос
/ 29 января 2010

См. Мое Устранение неполадок в сценариях Perl CGI Руководство по всем шагам, которые вы можете пройти, чтобы найти проблему.

1 голос
/ 29 января 2010

Скрипт «работает», когда я пытаюсь запустить его из командной строки:

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

дает мне домашнюю страницу моего веб-сайта.

Это означает, что на хосте, на котором вы пытаетесь это сделать, отсутствуют некоторые библиотеки. Чтобы выяснить, какие из них, вы должны изучить журнал ошибок сервера или попробовать запустить скрипт из оболочки, как показано выше.

См. ОТЛАДКА .

PS: Нет абсолютно никаких оснований для этих прототипов на makeRequest и writeXML. Кроме того, попробуйте warn sprintf "Status: %s\n", $response->status_line; вместо этих неприглядных print STDERR строк.

0 голосов
/ 30 января 2010

Заголовок выводится только при успешном выполнении программы, все ваши ошибки приводят к преждевременному окончанию заголовков скриптов.

Поместите 'print CGI-> header ();' и подходящее сообщение об ошибке для STDOUT во всех точках, где вы выводите сообщение об ошибке в STDERR, и вы увидите, что происходит не так.

...