サイトhttp://openbook.etoro.com/#/main/には、XHRキープアライブリクエストを介してjavascriptによって生成され、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に関係しますか?