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

Dmi*_*riy 4 perl anyevent

有必要只读取页面的一部分(n个字节)并关闭连接,如何在AnyEvent :: HTTP上执行此操作?

ike*_*ami 5

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

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);
      },
   );
}
Run Code Online (Sandbox Code Playgroud)

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

例如,

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

my ($data, $headers) = $cb->recv();
Run Code Online (Sandbox Code Playgroud)

例如,

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

$done->recv();
Run Code Online (Sandbox Code Playgroud)