AnyEvent-ReverseHTTP
view release on metacpan or search on metacpan
lib/AnyEvent/ReverseHTTP.pm view on Meta::CPAN
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 => (
is => 'rw', isa => 'Str',
required => 1, default => "http://www.reversehttp.net/reversehttp",
);
has label => (
is => 'rw', isa => 'Str',
required => 1,
lazy => 1, default => sub {
require Digest::SHA;
require Time::HiRes;
lib/AnyEvent/ReverseHTTP.pm view on Meta::CPAN
is => 'rw', isa => 'CodeRef',
default => sub { sub { Carp::croak("on_request handler is not defined!") } },
);
sub reverse_http {
my $cb = pop;
my @args =
@_ == 1 ? qw(label) :
@_ == 2 ? qw(label token) :
@_ >= 3 ? qw(endpoint label token) : ();
my %args; @args{@args} = @_;
return __PACKAGE__->new(%args, on_request => $cb)->connect;
}
sub connect {
my $self = shift;
my %query = (name => $self->label);
$query{token} = $self->token if $self->token;
my $body = join "&", map "$_=" . URI::Escape::uri_escape($query{$_}), keys %query;
http_post $self->endpoint, $body, sub {
my($body, $hdr) = @_;
if ($hdr->{Status} eq '201' || $hdr->{Status} eq '204') {
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 {
lib/AnyEvent/ReverseHTTP.pm view on Meta::CPAN
use AnyEvent::ReverseHTTP;
# simple Hello World server
my $guard = reverse_http "myserver123", "token", sub {
my $req = shift;
return "Hello World"; # You can return HTTP::Response object for more control
};
# more controls over options and callbacks
my $server = AnyEvent::ReverseHTTP->new(
endpoint => "http://www.reversehttp.net/reversehttp",
label => "aedemo1234",
token => "mytoken",
);
$server->on_register(sub {
my $pub_url = shift;
});
$server->on_request(sub {
my $req = shift;
( run in 0.360 second using v1.01-cache-2.11-cpan-b61123c0432 )