NAME
AnyEvent::HTTP::LWP::UserAgent - LWP::UserAgent interface but works using AnyEvent::HTTP
VERSION
version 0.10
SYNOPSIS
use AnyEvent::HTTP::LWP::UserAgent;
use Coro;
my $ua = AnyEvent::HTTP::LWP::UserAgent->new;
my @urls = (...);
my @coro = map {
    my $url = $_;
    async {
        my $r = $ua->get($url);
        print "url $url, content " . $r->content . "\n";
    }
} @urls;
$_->join for @coro;
# Or without Coro
use AnyEvent::HTTP::LWP::UserAgent;
use AnyEvent;
my $ua = AnyEvent::HTTP::LWP::UserAgent->new;
my @urls = (...);
my $cv = AE::cv;
$cv->begin;
foreach my $url (@urls) {
    $cv->begin;
    $ua->get_async($url)->cb(sub {
        my $r = shift->recv;
        print "url $url, content " . $r->content . "\n";
        $cv->end;
    });
}
$cv->end;
$cv->recv;
DESCRIPTION
When you use Coro you have a choice: you can use Coro::LWP or AnyEvent::HTTP (if you want to make asynchronous HTTP requests). If you use Coro::LWP, some modules may work incorrectly (for example Cache::Memcached) because of global change of IO::Socket behavior. AnyEvent::HTTP uses different programming interface, so you must change more of your old code with LWP::UserAgent (and HTTP::Request and so on), if you want to make asynchronous code.
AnyEvent::HTTP::LWP::UserAgent uses AnyEvent::HTTP inside but have an interface of LWP::UserAgent. You can safely use this module in Coro environment (and possibly in AnyEvent too).
In plain AnyEvent, you may use _async methods. They don't make blocking wait but return condition variable. So, you can avoid recursive blocking wait error.
SOME METHODS
- $ua->conn_cache
 - $ua->conn_cache($cache_obj)
 - 
New versions of
AnyEvent::HTTPsupports HTTP(S)/1.1 persistent connection, so you can control it inAnyEvent::HTTP::LWP::UserAgentusingconn_cachemethod.If you set
conn_cache(asLWP::ConnCacheobject) thenAnyevent::HTTP::LWP::UserAgentmakes two things. In first it sets global variable$AnyEvent::HTTP::ACTIVEas you settedtotal_capacityforconn_cache(be careful: this have a global consequences, not local). And in the secondAnyEvent::HTTP::LWP::UserAgentwill create persistent connections if your$uahaveconn_cache(local propery of$ua).But you can't use remainder methods of your
conn_cache, all connections will contains inAnyEvent::HTTP.$AnyEvent::HTTP::ACTIVEsets only when you setconn_cachefor$ua. If you just changetotal_capacityof oldconn_cacheit will not change anything. 
ASYNC METHODS
The following methods are async version of corresponding methods w/o _async suffix. Parameters are identical as originals. However, return value becomes condition variable. You can use it in a synchronous way by blocking wait
$ua->simple_request_async(@args)->recv
or in an asynchronous way, also.
$ua->simple_request_async(@args)->cb(sub { ... });
- simple_request_async
 - request_async
 - get_async
 - post_async
 - head_async
 - put_async
 - delete_async
 
LIMITATIONS AND DETAILS
Some features of LWP::UserAgent can be broken (protocols_forbidden or something else). Precise documentation and realization of these features will come in the future.
You can use some AnyEvent::HTTP global function and variables. But use agent of UA instead of $AnyEvent::HTTP::USERAGENT and max_redirect instead of $AnyEvent::HTTP::MAX_RECURSE.
Content in request can be specified by code reference. This is the same as LWP::UserAgent but there are some limitations. LWP::UserAgent uses chunked encoding if Content-Length is not specified, while this module does NOT use chunked encoding even if Content-Length is not specified.
Content in response can be specified as filename or code reference. This is the same as LWP::UserAgent.
SEE ALSO
http://github.com/tadam/AnyEvent-HTTP-LWP-UserAgent Coro::LWP AnyEvent::HTTP LWP::Protocol::AnyEvent::http LWP::Protocol::Coro::http
ACKNOWLEDGEMENTS
Yasutaka Atarashi
AUTHOR
Yury Zavarin <yury.zavarin@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2012 by Yury Zavarin.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.