Perl - HTTP :: Proxy Capture XHR / JSON-Kommunikation

Der Standorthttp://openbook.etoro.com/#/main/ hat einen Live-Feed, der von Javascript über XHR-Keep-Alive-Anfragen generiert wird und Antworten vom Server als gzip-komprimierte JSON-Zeichenfolge erhält.

Ich möchte den Feed in einer Datei erfassen.

Der übliche Weg (WWW :: Mech ..) ist (wahrscheinlich) nicht praktikabel, da die Notwendigkeit, alle Javascripts auf der Seite neu zu entwickeln und den Browser zu simulieren, eine wirklich schwierige Aufgabe ist. Suchen Sie daher nach einer alternativen Lösung.

Meine Idee ist die Verwendung einer Man-in-the-Middle-Taktik, damit der Broswser seine Arbeit erledigt und ich die Kommunikation über einen Perl-Proxy erfassen möchte - der nur für diese Aufgabe vorgesehen ist.

Ich kann die anfängliche Kommunikation abfangen, aber nicht den Feed selbst. Der Proxy funktioniert OK, da im Browser der Feed nur meine Filer laufen nicht funktioniert.

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 wird mit dem oben genannten Proxy für die gesamte Kommunikation konfiguriert.

Der Feed wird im Browser ausgeführt, sodass der Proxy ihn mit Daten füttert. (Wenn ich den Proxy stoppe, wird auch der Feed gestoppt). Zufällig (kann nicht herausfinden, wann) ich den folgenden Fehler erhalte:

[Tue Jul 10 17:13:58 2012] (42289) ERROR: Getting request failed: Client closed

Kann mir jemand einen Weg zeigen, wie man den korrekten HTTP :: Proxy-Filter für die gesamte Kommunikation zwischen dem Browser und dem Server von keep_alive XHR herstellt?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage