AnyEvent-ReverseHTTP

 view release on metacpan or  search on metacpan

META.yml  view on Meta::CPAN

  directory:
    - inc
    - t
    - xt
requires:
  Any::Moose: 0
  AnyEvent: 0
  AnyEvent::HTTP: 0
  Digest::SHA: 0
  Filter::Util::Call: 0
  HTTP::Request: 0
  Time::HiRes: 0
  URI::Escape: 0
  perl: 5.8.1
resources:
  license: http://dev.perl.org/licenses/
  repository: git://github.com/miyagawa/AnyEvent-ReverseHTTP.git
version: 0.05

Makefile.PL  view on Meta::CPAN

use inc::Module::Install;
name 'AnyEvent-ReverseHTTP';
all_from 'lib/AnyEvent/ReverseHTTP.pm';

requires 'HTTP::Request';
requires 'AnyEvent';
requires 'AnyEvent::HTTP';
requires 'URI::Escape';
requires 'Any::Moose';

requires 'Digest::SHA';
requires 'Time::HiRes';

build_requires 'Test::More';
use_test_base;

eg/proxy.pl  view on Meta::CPAN

#!/usr/bin/perl
use strict;
use warnings;

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 {

lib/AnyEvent/ReverseHTTP.pm  view on Meta::CPAN

package AnyEvent::ReverseHTTP;

use strict;
use 5.008_001;
our $VERSION = '0.05';

use Carp;
use AnyEvent::Util;
use AnyEvent::HTTP;
use HTTP::Request;
use HTTP::Response;
use URI::Escape;
use Scalar::Util;

use base qw(Exporter);
our @EXPORT = qw(reverse_http);

use Any::Moose;

has endpoint => (

lib/AnyEvent/ReverseHTTP.pm  view on Meta::CPAN

            my $app_url = _extract_link($hdr, 'related');
            $self->on_register->($app_url);
        } else {
            return $self->on_error->("$hdr->{Status}: $hdr->{Reason}");
        }

        my $poller; $poller = sub {
            my($body, $hdr) = @_;

            if ($hdr->{Status} eq '200') {
                my $req  = HTTP::Request->parse($body);
                $req->header('Requesting-Client', $hdr->{'requesting-client'});
                my $res  = $self->on_request->($req);

                my $postback = sub {
                    my $res = shift;

                    # Duck typing for as_string, but accepts plaintext too for 200
                    unless (Scalar::Util::blessed($res) && $res->can('as_string')) {
                        my $content = $res;
                        $res = HTTP::Response->new(200);

lib/AnyEvent/ReverseHTTP.pm  view on Meta::CPAN

      label    => "aedemo1234",
      token    => "mytoken",
  );

  $server->on_register(sub {
      my $pub_url = shift;
  });

  $server->on_request(sub {
      my $req = shift;
      # $req is HTTP::Request, return HTTP::Response or AnyEvent::CondVar that receives it
  });

  my $guard = $server->connect;

  AnyEvent->condvar->recv;

=head1 DESCRIPTION

AnyEvent::ReverseHTTP is an AnyEvent module that acts as a Reverse
HTTP server (which is actually a polling client for Reverse HTTP



( run in 0.539 second using v1.01-cache-2.11-cpan-de7293f3b23 )