繁体   English   中英

如何从LWP :: Simple的getstore()确定下载速度和数量?

[英]How can I determine the download speed and amount from LWP::Simple's getstore()?

使用perl模块LWP :: Simple时 ,有一种简单的方法可以确定单个getstore()调用下载的速度和数量吗? 这对于观察大文件下载的状态很有用。

在我的头脑中,一种方法是:

  1. 存储当前时间(time0)
  2. 在新进程中运行getstore
  3. 轮询已知的目标文件
    • 下载的数量将是当前文件大小(大小)
    • 下载速度会(size / current_time - time0)

我想知道是否有更简单的方法。

欢迎替代建议(也许我应该使用不同的模块?)

而不是使用LWP::Simple ,直接使用LWP :: UserAgent 首先,看看LWP :: Simple :: getstore如何初始化$ ua并调用请求。 你需要调用$ua->add_handler来指定一个response_data处理程序来做你想做的事情; 默认情况下(至少对于HTTP协议) LWP::UserAgent将读取最多4Kb块并为每个块调用response_data处理程序,但您可以在请求方法参数中建议不同的大小。

如果要区分标题数据和将存储在文件中的实际数据,或者如果存在重定向则执行特殊操作,您可能还需要指定其他处理程序。

除非您有其他要求(例如在下载期间查看速率和大小),否则您概述的步骤最容易思考和实施。

您可以在LWP :: Simple中导出基础用户代理对象。 如果您只想观看一次性下载,可以设置user-agent的show_progress位:

 use LWP::Simple qw($ua getstore);

 $ua->show_progress(1);

 getstore( 
'http://www.theperlreview.com/Issues/subscribers.html',
'subscribers.html'
);

要做更多的工作,你可以使用LWP :: Simple,但仍然做同样的事情,建议

 use LWP::Simple qw($ua);

 $ua->response_header( 
      sub { 
          my($response, $ua, $h) = @_; 
          ... 
          }
      );

在该子程序中,您可以读取数据并随意执行任何操作,包括保留计时器。 一旦得到答案,就可以删除那段代码并返回到getstore

Flavio Poletti为2009年春季的Perl评论撰写了“观看LWP的活动” 并展示了该技术的许多用途。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM