my $ua = LWP::UserAgent->new( ... );
my $request = $ua->get($url, ':content_cb' => sub
{
my ($d, $r, $p) = @_;
# need to know if this is the last chunk of data
});
$mech->add_handler ( 'response_data' => sub {
my ($response, $ua, $handler, $data) = @_;
...
#$response->content(undef); # remove data from response as it is received?
return 1; # so we keep being called
});
2条答案
按热度按时间w1e3prcc1#
从我在源代码中看到的情况来看,回调函数在出现eof或error时不会被回调。
但是没有必要这样做,代码可以放在
get
返回之后。如果希望使用一个公共sub来处理数据、eof和错误,可以在回调中和
get
返回后调用它。f0brbegy2#
可以通过
response_done
处理程序找出响应完成的时间*响应完成=〉sub { my($响应,$ua,$处理程序)= @_; *
在完全接收到响应之后,但在尝试任何重定向处理之前,调用处理程序。处理程序可用于提取信息或修改响应。
这将作为添加到用户代理对象
到目前为止,如果使用
:content_cb
回调,$response
中没有数据,因为它删除了数据。但是我们可以了解完成情况,可以设置标志(虽然在:content_cb
回调中看不到)或直接运行/触发其他处理,等等。还有一个
response_data
处理程序,在每个块上调用,可用于在数据到来时收集数据(而不是:content_cb
)我还发现
response_header
处理程序有时很有用(例如检测流中数据的开始)。