typester (owner)

Revisions

gist: 160511 Download_button fork
public
Public Clone URL: git://gist.github.com/160511.git
Embed All Files: show embed
proxy.pl #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/env perl
 
use strict;
use warnings;
use FindBin::libs;
 
use HTTP::Request::Common;
use AnyEvent::HTTP;
use AnyEvent::ReverseHTTP;
 
my $proxy_to = $ARGV[0] or die 'require proxy target';
 
my $w = AnyEvent::ReverseHTTP->new(
    on_register => sub {
        print "You can connect to your server at $_[0]\n";
    },
    on_request => sub {
        my $req = shift;
        my $resback = AnyEvent->condvar;
 
        my $target = $proxy_to . $req->uri;
 
        # proxy
        my %headers = map { $_ => $req->header($_) } $req->headers->header_field_names;
        http_request(
            $req->method, $target,
            headers => \%headers,
            body => $req->content,
            sub {
                my ($body, $hdr) = @_;
 
                my $res = HTTP::Response->new( $hdr->{Status} );
                for my $header (keys %{ $hdr || {} }) {
                    $res->header( $header => $hdr->{$header} );
                }
                $res->content( $body );
 
                $resback->send($res);
            }
        );
 
        $resback;
    },
)->connect;
 
AnyEvent->condvar->recv;