1#!/usr/bin/perl -w
2use strict;
3use HTTP::Proxy qw( :log );
4use HTTP::Proxy::BodyFilter::simple;
5use CGI::Util qw( unescape );
6
7# NOTE: Body request filters always receive the request body in one pass
8my $filter = HTTP::Proxy::BodyFilter::simple->new(
9    sub {
10        my ( $self, $dataref, $message, $protocol, $buffer ) = @_;
11        print STDOUT $message->method, " ", $message->uri, "\n";
12
13        # this is from CGI.pm, method parse_params
14        my (@pairs) = split ( /[&;]/, $$dataref );
15        for (@pairs) {
16            my ( $param, $value ) = split ( '=', $_, 2 );
17            $param = unescape($param);
18            $value = unescape($value);
19            printf STDOUT "    %-30s => %s\n", $param, $value;
20        }
21    }
22);
23
24my $proxy = HTTP::Proxy->new(@ARGV);
25$proxy->push_filter( method => 'POST', request => $filter );
26$proxy->start;
27
28