在Perl中从另一个HTTP资源进行流传输的最简单方法(不打开外壳进行卷曲并从stdin读取)?我在这里假设我正在读取的HTTP资源是潜在的无限流(或实际上非常长)]
[HTTP::Lite的request
方法允许您指定回调。
$data_callback
参数(如果使用)是一种在接收到数据时过滤数据或处理大量传输的方法。它必须是一个函数引用,并将被传递:对进行回调的http请求实例的引用,对将要添加到主体的当前数据块的引用以及$cbargs
参数(可以什么都可以)。它必须返回对要添加到文档正文中的数据的引用,或者返回undef。
但是,从源代码上看,更安全sub request
中存在一个[bug],因为它[忽略了传递的回调。它[忽略了。使用似乎set_callback
:#!/usr/bin/perl
use strict;
use warnings;
use HTTP::Lite;
my $http = HTTP::Lite->new;
$http->set_callback(\&process_http_stream);
$http->http11_mode(1);
$http->request('http://www.example.com/');
sub process_http_stream {
my ($self, $phase, $dataref, $cbargs) = @_;
warn $phase, "\n";
return;
}
C:\ Temp> ht连接内容长度完成标题内容完成内容数据做完了看起来传递给
request
方法的回调似乎受到不同的对待:
#!/usr/bin/perl
use strict;
use warnings;
use HTTP::Lite;
my $http = HTTP::Lite->new;
$http->http11_mode(1);
my $count = 0;
$http->request('http://www.example.com/',
\&process_http_stream,
\$count,
);
sub process_http_stream {
my ($self, $data, $times) = @_;
++$$times;
print "$$times====\n$$data\n===\n";
}