我使用的1and1的Windows基本主機包,我試圖運行一些Perl時掛起:的Perl的1and1服務器上運行使用LWP
#generate header
my $h = HTTP::Headers->new(
Content_type => 'audio/mpeg'
);
print $h->as_string;
#parse querystring
if (length ($ENV{'QUERY_STRING'}) > 0){
$buffer = $ENV{'QUERY_STRING'};
@pairs = split(/&/, $buffer);
foreach $pair (@pairs){
($name, $value) = split(/=/, $pair);
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$in{$name} = $value;
}
}
#generate url to GET
$url = 'http://translate.google.com/translate_tts?tl=en&q=' . $in{'q'};
use LWP::UserAgent;
#get file
my $ua = LWP::UserAgent->new();
$ua->agent('Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36');
my $req = new HTTP::Request GET => "$url";
#$req->header('Accept' => 'text/html');
my $res = $ua->request($req);
my $content = $res->content;
print $content;
基本上只是嘗試檢索音頻文件和打印。
當我在本地運行它時,我沒有任何問題。但是,當我在我的共享服務器(我沒有命令行訪問權限)上運行它時,它會掛起並且頁面無法加載。
有沒有人處理過這個問題,還是有什麼我可以做的調試呢?有沒有其他辦法可以做到這一點,可能工作?
編輯:更新後的代碼:
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my $q = CGI->new;
print $q->header('audio/mpeg');
#generate url to GET
#my $val = $q->param('q');
my $val = "test";
my $url = 'http://translate.google.com/translate_tts?tl=en&q=' . $val;
use LWP::UserAgent;
#get file
my $ua = LWP::UserAgent->new();
$ua->agent('Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36');
my $req = new HTTP::Request GET => "$url";
my $res = $ua->request($req); #hangs here
my $content = $res->content;
print $content;
我已經分離出的問題,請求調用,因此它必須是服務器配置。
至少,使用[CGI.pm](http://perldoc.perl.org/CGI.html),所以你不必自己解析查詢字符串。另外,你從來沒有聲明'%in',所以你要麼從你的代碼片段中省略,要麼不用'use strict;使用警告;'。 – ThisSuitIsBlackNot
至於調試,你有權訪問你的Web服務器的錯誤日誌嗎?這永遠是第一個看的地方。你也可以'使用CGI :: Carp qw(fatalsToBrowser);'直接向瀏覽器輸出錯誤信息(儘管如此,不要在生產環境中執行此操作)。 – ThisSuitIsBlackNot
可能您的主機不允許傳出連接。這些共享託管公司通常對他們的帶寬非常認真。閱讀他們的條款和支持頁面,他們可能會有一個常見問題或有關這個。如果是這種情況,您應該嘗試使用客戶端解決方案,如AJAX。 – foibs