Perl 如何确定LWP::Simple';的下载速度和下载量;s getstore()?
在使用perl模块时,是否有一种简单的方法来确定单个getstore()调用的下载速度和下载量?这将有助于观察大型文件下载的状态 在我脑海中,一种方法是:Perl 如何确定LWP::Simple';的下载速度和下载量;s getstore()?,perl,download,lwp,Perl,Download,Lwp,在使用perl模块时,是否有一种简单的方法来确定单个getstore()调用的下载速度和下载量?这将有助于观察大型文件下载的状态 在我脑海中,一种方法是: 存储当前时间(time0) 在新进程中运行getstore 轮询已知的目标文件 下载量将是当前文件大小(大小) 下载速度(大小/当前时间-时间0) 我想知道有没有更简单的方法 欢迎其他建议(也许我应该使用其他模块?而不是使用LWP::Simple,直接使用。首先,请看LWP::Simple::getstore如何初始化$ua并调用请求。您
- 下载量将是当前文件大小(大小)
- 下载速度(大小/当前时间-时间0)
欢迎其他建议(也许我应该使用其他模块?而不是使用
LWP::Simple
,直接使用。首先,请看LWP::Simple::getstore如何初始化$ua并调用请求。您需要调用$ua->add_handler
来指定一个响应_data
处理程序来执行任何您想要的操作;默认情况下(至少对于HTTP协议)LWP::UserAgent
将读取最多4Kb的块,并为每个块调用response\u data
处理程序,但您可以在请求方法参数中建议不同的大小
如果您想区分头数据和将存储在文件中的实际数据,或者如果有重定向,您可能还需要指定其他处理程序。除非您有其他要求(例如在下载过程中观察速率和大小),您概述的步骤是最容易思考和实施的 可以在LWP::Simple中导出底层用户代理对象。如果您只想一次性观看下载,可以设置用户代理的
show\u progress
位:
use LWP::Simple qw($ua getstore);
$ua->show_progress(1);
getstore(
'http://www.theperlreview.com/Issues/subscribers.html',
'subscribers.html'
);
要做更多的工作,您可以使用LWP::Simple,并且仍然执行以下操作:
在该子例程中,您读取数据并对其执行任何操作,包括保留计时器。一旦你得到答案,你就可以删除那一段代码,然后回到getstore
弗拉维奥·波莱蒂(Flavio Poletti)写了《观看LWP的活动》,展示了这项技术的许多用途。谢谢!我知道一定有更好的方法。谢谢你的回复和例子。弗拉维奥·波莱蒂(Flavio Poletti)的一页评论也很有用且简洁。我觉得弗拉维奥(Flavio)的一页评论一点也不简洁。而且,这个答案对我也没有帮助。我需要下载一个非常大的文件,当它下载时,我需要使用命名管道将消息发布回我的GUI(用Objective C编写)。我已经开始使用管道了,但是在下载LWP字节迭代器时,我还不能理解它。
use LWP::Simple qw($ua);
$ua->response_header(
sub {
my($response, $ua, $h) = @_;
...
}
);