El sitio http://openbook.etoro.com/#/main/ tiene una transmisión en vivo de lo que se genera mediante javascript a través de solicitudes XHR keep-alive y obteniendo respuestas del servidor como cadena comprimida gzip JSON.Perl - HTTP :: Captura de proxy Comunicación XHR/JSON
Quiero capturar la alimentación en un archivo.
La forma habitual (WWW :: Mech ..) es (probablemente) no viable porque la necesidad de reverese de la ingeniería de todos los JavaScript en la página y la simulación del navegador es una tarea realmente difícil, por lo que buscamos una solución alternativa.
Mi idea es usar una táctica del hombre en el medio, por lo que el broswser hará su trabajo y quiero capturar la comunicación a través de un proxy perl, dedicado solo para esta tarea.
Puedo capturar la comunicación inicial, pero no la alimentación en sí. El proxy funciona bien, porque en el navegador en el que se está ejecutando el feed, solo mis archivos no funcionan.
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 se configura utilizando el proxy anterior para todas las comunicaciones.
El feed se está ejecutando en el navegador, por lo que el proxy lo alimenta con datos. (Cuando detengo el proxy, el feed se detiene también). Al azar (no se puede calcular cuándo) i consiguiendo el error siguiente:
[Tue Jul 10 17:13:58 2012] (42289) ERROR: Getting request failed: Client closed
¿Alguien puede mostrar una forma, cómo construt la correcta HTTP :: filtro proxy para Volquete toda la comunicación entre el navegador y el servidor regardles de keep_alive XHR?
Estás reinventando la rueda. Escriba ctrl + shift + i para ejecutar Firefox Firebug/Opera Dragonfly/Chromium Inspecter y busque en el panel de red el aspecto de los pares de solicitud/respuesta HTTP. Alternativamente, use Wireshark, complete una captura, filtre la expresión 'http' en el cuadro combinado cerca de la parte superior, seleccione el paquete que inicia una solicitud, menú Analizar → Seguir flujo TCP para ver la representación de texto de un par de solicitud/respuesta HTTP . – daxim
Lo siento @daxim, pero esta no es una solución.Ofc, puedo usar Firebug o cualquier otro panel de control del navegador (y lo usé para analizar). Puedo usar tcpdump y/o tcpflow también. Quiero capturar exactamente el feed (para un trabajo posterior) en un servidor sin cabeza (sin X), sin navegador. Gracias por su respuesta, de todas formas, pero si quiero capturar paquetes simples, no pediré una solución perl. – kobame
@daxim, entiendo su punto de vista, pero la pregunta es legítima y muestra un problema real. (e IMO, es mucho mejor que las preguntas normales de SO-perl, como cómo usar tr /// :) Probé el guión, y tampoco sé la respuesta, ¿me pueden ayudar? – jm666