HTTP-MultiGet
view release on metacpan or search on metacpan
lib/HTTP/MultiGet.pm view on Meta::CPAN
package HTTP::MultiGet;
=head1 NAME
HTTP::MultiGet - Run many http requests at once!
=head1 SYNOPSIS
use Modern::Perl;
use HTTP::MultiGet;
use HTTP::Request;
my $getter=new HTTP::MultiGet;
my @requests=(map { HTTP::Request->new(GET=>"http://localhost$_") } (1 .. 1000));
my @responses=$getter->run_requests(@requests);
my $id=0;
foreach my $response (@responses) {
my $request=$requests[$id++];
print "Results for: ".$request->uri."\n";
if($response->is_success) {
print $response->decoded_content;
} else {
print $response->status_line,"\n";
}
}
=head2 Handling Multiple Large Downloads
use Modern::Perl;
use HTTP::MultiGet;
use HTTP::Request;
my $req=HTTP::Request->new(GET=>'http://some.realy.big/file/to/download.gz');
my $req_b=HTTP::Request->new(GET=>'http://some.realy.big/file/to/download2.gz');
# create a callback
my $code=sub {
my ($getter,$request,$headers,$chunk)=@_;
# 0: Current HTTP::MultiGet instance
# 1: HTTP::Request object
# 2: HTTP::Headers object
# 3: Chunk of data being downloaded
if($headers->header('Status')==200) {
# do something
} else {
# do something with $body
}
};
my $getter=new HTTP::MultiGet;
my ($result,$result_b)=$getter->run_requests([$req,on_body=>$code],[$req_b,on_body=>$code]);
The arguments: on_body=>$code are called called on each chunk downloaded. $result is created when the download is completed, but $result->decoded_content is going to be empty
=head1 DESCRIPTION
Created a wrapper for: L<AnyEvent::HTTP>, but provides a more LWP like feel.
=cut
use Moo;
use Log::Log4perl;
use Data::Queue;
use Scalar::Util qw(looks_like_number);
Log::Log4perl->wrapper_register(__PACKAGE__);
use AnyEvent;
use Data::Dumper;
use HTTP::Response;
use HTTP::Headers;
use HTTP::Request;
use Class::Method::Modifiers;
use AnyEvent::HTTP::Request;
use MooX::Types::MooseLike::Base qw(:all);
use AnyEvent::HTTP::Response;
use AnyEvent;
use Carp qw(croak);
use Ref::Util qw(is_plain_arrayref is_plain_hashref);
require AnyEvent::HTTP;
use namespace::clean;
BEGIN {
with 'Log::LogMethods';
with 'Data::Result::Moo';
}
our $VERSION='1.023';
sub BUILD {
my ($self)=@_;
$self->{stack}=new Data::Queue;
( run in 2.230 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )