Skip to content

Instantly share code, notes, and snippets.

@typester
Created August 3, 2009 12:08
Show Gist options
  • Save typester/160511 to your computer and use it in GitHub Desktop.
Save typester/160511 to your computer and use it in GitHub Desktop.
#!/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;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment