加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 如何使用AnyEvent :: HTTP只获取页面的一部分?

发布时间:2020-12-16 06:21:20 所属栏目:大数据 来源:网络整理
导读:有必要只读取页面的一部分(n个字节)并关闭连接,如何在AnyEvent :: HTTP上执行此操作? 解决方法 随着块的到来,on_body被重复调用.从on_body返回false会终止下载. sub my_http_request { my $cb = pop; my ($method,$url,%args) = @_; croak("Unsupported: on
有必要只读取页面的一部分(n个字节)并关闭连接,如何在AnyEvent :: HTTP上执行此操作?

解决方法

随着块的到来,on_body被重复调用.从on_body返回false会终止下载.

sub my_http_request {
   my $cb = pop;
   my ($method,$url,%args) = @_;

   croak("Unsupported: on_body")          if $args{on_body};
   croak("Unsupported: want_body_handle") if $args{want_body_handle};

   my $max_to_read = delete($args{max_to_read});

   my $data;
   return http_request(
      $method => $url,%args,on_body => sub {
         #my ($chunk,$headers) = @_;
         $data .= $_[0];
         return !defined($max_to_read) || length($data) < $max_to_read;
      },sub {
         my (undef,$headers) = @_;
         $cb->($data,$headers);
      },);
}

像http_request一样使用my_http_request,除了它接受一个可选的max_to_read参数.

例如,

my $cb = AnyEvent->condvar();
my_http_request(
   GET => 'http://...',...
   max_to_read => ...,$cb,);

my ($data,$headers) = $cb->recv();

例如,

my $done = AnyEvent->condvar();
my_http_request(
   GET => 'http://...',sub {
      my ($data,$headers) = @_;
      ...
      $done->send();
   },);

$done->recv();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读