AnyEvent-Net-Curl-Queued
view release on metacpan or search on metacpan
inc/Test/HTTP/AnyEvent/Server.pm view on Meta::CPAN
my ($h) = @_;
AE::log debug => "closing connection\n";
my $r = eval {
## no critic (ProhibitNoWarnings)
no warnings;
my $id = fileno($h->{fh});
delete $pool{$id};
shutdown $h->{fh}, 2;
return 1;
};
AE::log warn => "shutdown() aborted\n"
if not defined $r or $@;
$h->destroy;
return;
}
sub _reply {
my ($h, $req, $hdr, $content) = @_;
state $timer = {};
my $res = HTTP::Response->new(
200 => 'OK',
HTTP::Headers->new(
Connection => 'close',
Content_Type => 'text/plain',
Server => __PACKAGE__ . "/$Test::HTTP::AnyEvent::Server::VERSION AnyEvent/$AE::VERSION Perl/$] ($^O)",
)
);
$res->date(time);
$res->protocol('HTTP/1.0');
if ($req =~ m{^(GET|POST)\s+(.+)\s+(HTTP/1\.[01])$}ix) {
my ($method, $uri, $protocol) = ($1, $2, $3);
AE::log debug => "sending response to $method ($protocol)\n";
for ($uri) {
when (m{^/repeat/(\d+)/(.+)}x) {
$res->content($2 x $1);
} when (m{^/echo/head$}x) {
$res->content(
join(
"\015\012",
$req,
$hdr,
)
);
} when (m{^/echo/body$}x) {
$res->content($content);
} when (m{^/delay/(\d+)$}x) {
$res->content(sprintf(qq(issued %s\n), scalar gmtime));
$timer->{$h} = AE::timer $1, 0, sub {
delete $timer->{$h};
AE::log debug => "delayed response\n";
$h->push_write($res->as_string("\015\012"));
_cleanup($h);
};
return;
} default {
$res->code(404);
$res->message('Not Found');
$res->content('Not Found');
}
}
} else {
AE::log error => "bad request\n";
$res->code(400);
$res->message('Bad Request');
$res->content('Bad Request');
}
$h->push_write($res->as_string("\015\012"));
_cleanup($h);
return;
}
1;
__END__
=pod
=encoding utf8
=head1 NAME
Test::HTTP::AnyEvent::Server - the async counterpart to Test::HTTP::Server
=head1 VERSION
version 0.007
=head1 SYNOPSIS
#!/usr/bin/env perl
use common::sense;
use AnyEvent::HTTP;
use Test::HTTP::AnyEvent::Server;
my $server = Test::HTTP::AnyEvent::Server->new;
my $cv = AE::cv;
$cv->begin;
http_request GET => $server->uri . q(echo/head), sub {
my ($body, $hdr) = @_;
say $body;
$cv->end;
};
$cv->wait;
=head1 DESCRIPTION
This package provides a simple B<NON>-forking HTTP server which can be used for testing HTTP clients.
=head1 ATTRIBUTES
=head2 address
( run in 1.187 second using v1.01-cache-2.11-cpan-39bf76dae61 )