2012-09-03 14 views
4

有一个网页具有非常复杂的结构和JavaScript逻辑与很多Ajax调用,有些要求只得到了响应纯(一个应用/ JSON)对象,一些Ajax获取HTML等...;(perl的HTTP代理:: - 转储全部通信

需要分析浏览器和服务器之间的充分沟通,所以决定写一个Perl代理什么是“简单”倾倒在任何方向(请求和响应的所有文字交流过)

找到。 HTTP::Proxy模块,但我完全与滤波器混淆。

基本代码:

use strict; 
use warnings; 
use HTTP::Proxy; 

my $proxy = HTTP::Proxy->new(port => 3128); 
$proxy->start; 

很好地工作,但我没有任何想法如何为它编写过滤器。

发行版中的“eg”目录有如何修改响应主体内容等的复杂实例,但缺少基本的dump_all_communication

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

  • 倾倒了所有的HTTP请求,什么是从浏览器进入服务器
  • 和转储出所有响应的内容,当他们有哑剧:text/*application/jsonapplication/x-javascript(或更好的:任何东西,但没有图像,PDF和Flash)

Here is similiar question,但它是要过滤JSON和我想更加简单 - 全部转储(人升请求和所有响应(但无图象))

回答

2

基于一个例子,我会做到这一点。它只是打印出这个代理中所经过的所有内容。

相应地调整你的过滤器。

问候,

{ 
    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());