2010-01-29 46 views
-1

我有我的本地主機上工作的CGI代理,但是當我嘗試讓它在另一臺服務器上工作時,我得到腳本頭的過早結束。我已經在下面包含了源代碼。我也嘗試打印頭而不是文本/ XML,它工作本地主機,但它在服務器上失敗。爲什麼從我的CGI代理中得到「腳本頭文件過早結束」?

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

服務器錯誤日誌說什麼? – 2010-01-29 20:34:24

回答

1

腳本「作品」當我嘗試它的命令行:

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

給我我的網站的主頁。

這意味着,您嘗試的主機缺少一些庫。要弄清楚哪些應該檢查服務器的錯誤日誌,或者嘗試從shell中運行腳本,如上所示。

參見DEBUGGING

PS:對於makeRequestwriteXML這些原型絕對沒有好理由。另外,請嘗試warn sprintf "Status: %s\n", $response->status_line;而不是那些難看的print STDERR行。

+0

謝謝!我對perl ... ha一無所知,而且這個腳本的大部分內容都是從我在我們的服務器上找到的舊腳本中抓取的。當我編輯它時,它看起來有點時髦。 – Parris 2010-01-29 19:20:39

0

如果程序成功,您只輸出一個頭文件,所有的錯誤條件都會導致腳本頭文件過早結束。

放一個'print CGI-> header();'並向STDERR輸出錯誤消息的所有點向STDOUT發送適當的錯誤消息,然後您將看到發生了什麼問題。

相關問題