网站http://openbook.etoro.com/#/main/ http://openbook.etoro.com/#/main/有一个实时提要,由 javascript 通过 XHR keep-alive 请求生成,并以 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
有人可以告诉我一种方法,如何为浏览器和服务器之间的所有通信构建正确的 HTTP::Proxy 过滤器,无论 keep_alive XHR 是什么?