2011-12-09 70 views
4

我正在使用perl對url執行get請求,並且結果似乎被截斷。LWP的結果::簡單get被截斷

如果我運行

​​

結果是1823,如果我創建以下文件foo.pl:

#!/usr/bin/perl 

my $url = 'myurl'; 

use LWP::Simple; 
my $content = get $url; 
die "Couldn't get $url" unless defined $content; 
print $content; 

和運行

./foo.pl | wc -l 

結果從不同大約1300到偶爾1823.手動檢查輸出顯示,使用perl時輸出在中線斷開。

什麼可能導致這種情況?

+2

'curl'總是起作用嗎?它可能只是一個狡猾的服務器?你看過「Content-length」頭文件嗎? –

+0

是的,'curl'始終有效。 – jonderry

+0

我們無法重現您的問題,提供更多信息。 – daxim

回答

1

如果你關閉緩衝會發生什麼?我也同意Karsten S.在檢查http頭文件中的錯誤代碼。最後,我還會嘗試將內容存儲到數組中,以查看會發生什麼。

要關閉緩衝功能,您可以簡單地在您的腳本的use語句後面放置一個$|++。再次,在黑暗中拍攝。

要檢查http標頭,可以使用CGI。這裏有一個小網站就如何從請求得到的頭一個很好的例子:

http://www.velocityreviews.com/forums/t24118-re-lwp-simple-header-information-problems.html

最後,嘗試使用數組,@contents,存儲從網絡服務器,而不是一個標量,$contents內容。過去我曾經有過一些時間,Perl從遠程服務器傳遞的東西被誤解爲列表。我不確定LWP::Simple是否可以解決這些問題,但不會因爲嘗試而受傷。您可能只會獲取數據的一部分,其餘部分可能會被覆蓋或完全忽略。將數據放入數組可以幫助確定是否發生這種情況。