perl http :: proxy - 转储所有通信

时间:2012-09-03 15:30:51

标签: perl

有一个非常复杂的结构的网页和带有许多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

任何人都可以指导我,如何编写一个简单的过滤器:

  • 转出从浏览器到服务器的所有http请求
  • 并将所有回复的内容转储出来,当他们有mime时:text/*application/json以及application/x-javascript(或更好:除了没有图片,pdf和flash之外的任何内容)

Here is similiar question,但它想要过滤JSON,我想要更简单 - 转储所有内容(所有请求和所有响应(但没有图像))

1 个答案:

答案 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());