该站点http://openbook.etoro.com/#/main/有一个实时提要,该提要由 javascript 通过 XHR 保持活动请求生成,并从服务器作为 gzip 压缩 JSON 字符串获取答案。
我想将提要捕获到文件中。
通常的方法(WWW::Mech..)(可能)不可行,因为需要对页面中的所有 Javascript 进行反向工程并模拟浏览器确实是一项艰巨的任务,因此,寻找替代解决方案。
我的想法是使用中间人策略,因此浏览器将完成他的工作,我想通过 perl 代理捕获通信 - 仅用于此任务。
我能够捕捉到最初的交流,但不能捕捉到提要本身。代理工作正常,因为在浏览器中,提要只运行我的文件管理器不起作用。
use HTTP::Proxy;
use HTTP::Proxy::HeaderFilter::simple;
use HTTP::Proxy::BodyFilter::simple;
use Data::Dumper;
use strict;
use warnings;
my $proxy = HTTP::Proxy->new(
port => 3128, max_clients => 100, max_keep_alive_requests => 100
);
my $hfilter = HTTP::Proxy::HeaderFilter::simple->new(
sub {
my ( $self, $headers, $message ) = @_;
print STDERR "headers", Dumper($headers);
}
);
my $bfilter = HTTP::Proxy::BodyFilter::simple->new(
filter => sub {
my ( $self, $dataref, $message, $protocol, $buffer ) = @_;
print STDERR "dataref", Dumper($dataref);
}
);
$proxy->push_filter( response => $hfilter); #header dumper
$proxy->push_filter( response => $bfilter); #body dumper
$proxy->start;
Firefox 使用上述代理配置所有通信。
提要在浏览器中运行,因此代理向其提供数据。(当我停止代理时,提要也停止了)。随机(不知道何时)我收到以下错误:
[Tue Jul 10 17:13:58 2012] (42289) ERROR: Getting request failed: Client closed
任何人都可以告诉我一种方法,如何为 Dumper 构建正确的 HTTP::Proxy 过滤器,无论 keep_alive XHR 是浏览器和服务器之间的所有通信吗?