2012-06-11 47 views

回答

7
use 5.010; 
use strictures; 
use LWP::UserAgent qw(); 

my $content; 
LWP::UserAgent->new->get(
    $url, 
    ':content_cb' => sub { 
     my ($chunk, $res) = @_; 
     state $length = $res->header('Content-Length'); 
     $content .= $chunk; 
     die if length($content)/$length > 0.5; 
    }, 
); 
+0

使用狹窄; ?你的意思是'嚴格',或者......? – Marcus

+2

@Marcus,[strictures](http://search.cpan.org/perldoc?strictures) – ikegami

+4

不要使用'strictures'。保存一行代碼是整個CPAN的依賴關係。 – friedo

2

如果Web應用程序需要很長時間才能呈現頁面,通常無法通過獲取頁​​面的「一半」來加速該過程。

頁面將在所有數據庫查詢和實際呈現完成後發送。而這些可能是長時間拖延的原因。

3

如果有問題的網站提供了Content-Length標題,您可以問一下要發送多少數據並只請求一半數據。

此代碼演示。

use strict; 
use warnings; 

use LWP; 

my $ua = LWP::UserAgent->new; 
my $url = 'http://website.test'; 

my $resp = $ua->head($url); 
my $half = $resp->header('Content-Length')/2; 

$resp = $ua->get($url, Range => "bytes=1-$half"); 
my $content = $resp->content; 
+0

我試了這個代碼,它只是給了我整個頁面。有什麼我在這裏失蹤? – srchulo

+0

[HTTP規範§14.35.2](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2):「服務器可能會忽略Range標頭。」動態響應很少實現HTTP範圍。 – daxim

相關問題