使用perl模块LWP::Simple时,有一种简单的方法可以确定单个getstore()调用下载的速度和数量吗?这对于观察大文件下载的状态非常有用。
脱离我的头脑,一种方法是:
我想知道是否有更简单的方法。
欢迎备选建议(也许我应该使用不同的模块?)
答案 0 :(得分:7)
不使用LWP::Simple
,而是直接使用LWP::UserAgent。首先,看看LWP :: Simple :: getstore如何初始化$ ua并调用请求。您需要调用$ua->add_handler
来指定response_data
处理程序来执行您想要的任何操作;默认情况下(至少对于HTTP协议)LWP::UserAgent
将读取4Kb块并为每个块调用response_data
处理程序,但您可以在请求方法参数中建议不同的大小。
如果要区分标题数据和将存储在文件中的实际数据,或者如果存在重定向,请执行特殊操作,您可能还需要指定其他处理程序。
答案 1 :(得分:4)
除非您有其他要求(例如在下载过程中观察速率和大小),否则您概述的步骤最容易思考和实施。
您可以在LWP :: Simple中导出基础用户代理对象。如果您只想观看一次性下载,可以设置用户代理的show_progress
位:
use LWP::Simple qw($ua getstore);
$ua->show_progress(1);
getstore(
'http://www.theperlreview.com/Issues/subscribers.html',
'subscribers.html'
);
要做更多的工作,你可以使用LWP :: Simple并仍然执行same thing ysth suggests:
use LWP::Simple qw($ua);
$ua->response_header(
sub {
my($response, $ua, $h) = @_;
...
}
);
在该子程序中,您可以读取数据并随意执行任何操作,包括保留计时器。得到答案后,您可以删除该位代码,然后返回getstore
。
Flavio Poletti为The Perl Review, Spring 2009撰写了“观看LWP的活动”,并展示了该技术的许多用途。