1#!/usr/bin/perl -w
2use HTTP::Proxy qw( :log );
3use HTTP::Proxy::HeaderFilter::simple;
4use strict;
5
6# a very simple proxy
7my $proxy = HTTP::Proxy->new(@ARGV);
8
9# this filter redirects all requests to perlmonks.org
10my $filter = HTTP::Proxy::HeaderFilter::simple->new(
11    sub {
12        my ( $self, $headers, $message ) = @_;
13
14        # modify the host part of the request
15        $self->proxy()->log( ERROR, "FOO", $message->uri() );
16        $message->uri()->host('perlmonks.org');
17
18        # create a new redirect response
19        my $res = HTTP::Response->new(
20            301,
21            'Moved to perlmonks.org',
22            [ Location => $message->uri() ]
23        );
24
25        # and make the proxy send it back to the client
26        $self->proxy()->response($res);
27    }
28);
29
30# put this filter on perlmonks.com and www.perlmonks.org
31$proxy->push_filter( host => 'perlmonks.com',     request => $filter );
32$proxy->push_filter( host => 'www.perlmonks.org', request => $filter );
33
34$proxy->start();
35