#!/usr/bin/perl -w
use strict;
use HTTP::Proxy qw( :log );
use HTTP::Proxy::HeaderFilter::simple;
use CGI::Util qw( unescape );
my $proxy = HTTP::Proxy->new(@ARGV);
$proxy->push_filter(
host => 'groups.yahoo.com',
response => HTTP::Proxy::HeaderFilter::simple->new(
sub {
my ( $self, $headers, $message ) = @_;
my $location;
# ads start by redirecting to 'interrupt'
return
unless ( $location = $headers->header('Location') )
&& $location =~ m!/interrupt\?!;
# fetch the ad page (we need the cookie)
# use a new request to avoid modifying the original one
$self->proxy->log( FILTERS, "YAHOOGROUPS",
"Ad interrupt detected: fetching $location" );
my $r = $self->proxy->agent->simple_request(
HTTP::Request->new(
GET => $location,
$message->request->headers # headers are cloned
)
);
# redirect to our original destination
# which was stored in the 'done' parameter
# and pass the cookie along
$location = unescape($location);
$location =~ s|^(http://[^/]*).*done=([^&]*).*$|$1$2|;
$headers->header( Location => $location );
$headers->header( Set_Cookie => $r->header('Set_Cookie') );
$self->proxy->log( FILTERS, "YAHOOGROUPS",
"Set-Cookie: " . $r->header('Set_Cookie') );
}
)
);
$proxy->start;