I would look at AnyEvent::HTTP, which allows you to run lots (and lots) of HTTP requests in parallel. To reduce bandwidth on errors, you could first test with a HEAD request and follow up with a GET request on success. If you expect most URLs to be successfull and want the body then, I would just use a GET request.
For grouping all your requests, have a look at the ->begin method of CondVars in AnyEvent.
A rough, untested program could look something like this:
#!perl -w use strict; use AnyEvent; use AnyEvent::HTTP; my $done = AnyEvent->condvar; while (my $url = <DATA>) { $url =~ s!\s+$!!; $done->begin( sub { $_[0]->send } ); http_get $url, sub { my ($body, $headers) = @_; print "Retrieved $url ($headers->{Status})"; $done->end }; }; print "All requests sent. Waiting for responses.\n"; $done->recv; print "Done.\n"; __DATA__ http://localhost http://example.com http://google.in
Update: Remove whitespace at end of the URLs
In reply to Re: Fast fetching of HTML response code
by Corion
in thread Fast fetching of HTML response code
by mrguy123
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |