【发布时间】:2012-06-11 16:36:10
【问题描述】:
有谁知道在 GET 或 POST 请求中仅获取 50% 网页的最佳方法?我获取的网页需要 10 到 20 秒才能完全加载,我只需要从页面开头过滤几行。
【问题讨论】:
有谁知道在 GET 或 POST 请求中仅获取 50% 网页的最佳方法?我获取的网页需要 10 到 20 秒才能完全加载,我只需要从页面开头过滤几行。
【问题讨论】:
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;
},
);
【讨论】:
strictures。保存一行代码就是一个完整的CPAN依赖。
length($content) >= 1024 ** 2
如果有问题的网站提供了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;
【讨论】:
如果 Web 应用程序需要很长时间来呈现页面,您通常无法通过获取页面的“一半”来加速该过程。
页面将在所有数据库查询和实际渲染完成后交付。这些很可能是造成长时间延误的原因。
【讨论】: