Perl 如何确定LWP::Simple';的下载速度和下载量;s getstore()?

Perl 如何确定LWP::Simple';的下载速度和下载量;s getstore()?,perl,download,lwp,Perl,Download,Lwp,在使用perl模块时,是否有一种简单的方法来确定单个getstore()调用的下载速度和下载量?这将有助于观察大型文件下载的状态 在我脑海中,一种方法是: 存储当前时间(time0) 在新进程中运行getstore 轮询已知的目标文件 下载量将是当前文件大小(大小) 下载速度(大小/当前时间-时间0) 我想知道有没有更简单的方法 欢迎其他建议(也许我应该使用其他模块?而不是使用LWP::Simple,直接使用。首先,请看LWP::Simple::getstore如何初始化$ua并调用请求。您

在使用perl模块时,是否有一种简单的方法来确定单个getstore()调用的下载速度和下载量?这将有助于观察大型文件下载的状态

在我脑海中,一种方法是:

  • 存储当前时间(time0)
  • 在新进程中运行getstore
  • 轮询已知的目标文件
    • 下载量将是当前文件大小(大小)
    • 下载速度(大小/当前时间-时间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) = @_; 
              ... 
              }
          );