有一个非常复杂的结构的网页和带有许多ajax调用的javascript逻辑,有些请求只有一个响应纯(applicaton / 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,我想要更简单 - 转储所有内容(所有请求和所有响应(但没有图像))
答案 0 :(得分:2)
基于一个例子,我会这样做。它只是打印出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());