AnyEvent-ReverseHTTP
view release on metacpan or search on metacpan
lib/AnyEvent/ReverseHTTP.pm view on Meta::CPAN
http_post $hdr->{URL}, $res_body,
headers => { 'content-type' => 'message/http' },
sub {
my($body, $hdr) = @_;
if ($hdr->{Status} ne '202') {
$self->on_error->("$hdr->{Status}: $hdr->{Reason}");
}
};
};
# Return condvar to pass back to event loop
if (Scalar::Util::blessed($res) && $res->isa('AnyEvent::CondVar')) {
$res->cb(sub { $postback->($res->recv) });
} else {
$postback->($res);
}
}
my $next = _extract_link($hdr, 'next');
http_get $next, $poller;
};
my $url = _extract_link($hdr, 'first');
http_get $url, $poller;
};
return AnyEvent::Util::guard { undef $self };
}
sub _extract_link {
my($hdr, $rel) = @_;
my @links = $hdr->{link} =~ /<([^>]*)>;\s*rel="\Q$rel\E"/g;
return $links[0];
}
no Any::Moose;
__PACKAGE__->meta->make_immutable;
1;
__END__
=encoding utf-8
=for stopwords
=head1 NAME
AnyEvent::ReverseHTTP - reversehttp for AnyEvent
=head1 SYNOPSIS
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;
# $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
gateway).
This module implements simple Reverse HTTP client that's tested
against I<reversehttp.net> demo server. More complicated specification
like relaying or pipelining is not (yet) implemented.
=head1 AUTHOR
Tatsuhiko Miyagawa E<lt>miyagawa@bulknews.netE<gt>
=head1 LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=head1 SEE ALSO
L<http://www.reversehttp.net/reverse-http-spec.html>
=cut
( run in 0.506 second using v1.01-cache-2.11-cpan-385001e3568 )