有一个具有非常复杂的结构和 javascript 逻辑的网页,其中包含许多 ajax 调用,有些请求只得到响应纯(应用程序/json)对象,有些 ajax 得到 html 等等......;(
需要分析浏览器和服务器之间的完整通信,因此决定编写一个 perl-proxy 什么“简单”转储任何方向的所有文本通信(请求和响应也是如此)。
找到了 HTTP::Proxy 模块,但我完全混淆了过滤器。
基本代码:
use strict;
use warnings;
use HTTP::Proxy;
my $proxy = HTTP::Proxy->new( port => 3128 );
$proxy->start;
效果很好,但我不知道如何为其编写过滤器。
发行版中的“eg”目录有数百万个复杂的例子,如何修改响应正文内容等,但缺少基本的
dump_all_communication
。任何人都可以指导我,如何编写一个简单的过滤器:
text/*
和 application/json
和 application/x-javascript
(或更好:除了没有图像、pdf 和 flash 之外的任何东西)Here is similiar question ,但它想要过滤器 JSON 而我想要更简单 - 转储所有内容(所有请求和所有响应(但没有图像))
最佳答案
基于一个例子,我会这样做。它只是将在此代理中经过的所有内容打印到 stderr。
相应地调整您的过滤器。
问候,
{
package DumpAllBody;
use base qw( HTTP::Proxy::BodyFilter );
use Data::Dumper;
sub filter {
my ( $self, $dataref, $message, $protocol, $buffer ) = @_;
warn "Body:\n".Dumper($dataref,$message,$protocol,$buffer);
}
}
{
package DumpAllHeader;
use base qw( HTTP::Proxy::HeaderFilter );
use Data::Dumper;
sub filter {
my ( $self, $headers, $message ) = @_;
warn "Body:\n".Dumper($headers,$message);
}
}
$proxy->push_filter( request => DumpAllHeader->new(), response => DumpAllHeader->new());
$proxy->push_filter( request => DumpAllBody->new(), response => DumpAllBody->new());
关于perl http::proxy - 转储所有通信,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12250664/