NAME LWP::Protocol::Net::Curl - the power of libcurl in the palm of your hands! VERSION version 0.013 SYNOPSIS #!/usr/bin/env perl; use common::sense; use LWP::Protocol::Net::Curl; use WWW::Mechanize; ... DESCRIPTION Drop-in replacement for LWP, WWW::Mechanize and their derivatives to use Net::Curl as a backend. Advantages: * support ftp/ftps/http/https/sftp/scp protocols out-of-box (secure layer require libcurl to be compiled with TLS/SSL/libssh2 support) * support SOCKS4/5 proxy out-of-box * connection persistence and DNS cache (independent from LWP::ConnCache) * lightning-fast HTTP compression and redirection * lower CPU usage: this matters if you "fork()" multiple downloader instances * asynchronous threading via Coro::Select (see eg/async.pl) * at last but not least: 100% compatible with both LWP and WWW::Mechanize test suites! LIBCURL INTERFACE You may query which LWP protocols are implemented through Net::Curl by accessing @LWP::Protocol::Net::Curl::implements or %LWP::Protocol::Net::Curl::implements. By default, every protocol listed in that array will be implemented via LWP::Protocol::Net::Curl. It is possible to import only specific protocols: use LWP::Protocol::Net::Curl takeover => 0; LWP::Protocol::implementor(https => 'LWP::Protocol::Net::Curl'); The default value of "takeover" option is *true*, resulting in exactly the same behavior as in: use LWP::Protocol::Net::Curl takeover => 0; LWP::Protocol::implementor($_ => 'LWP::Protocol::Net::Curl') for @LWP::Protocol::Net::Curl::implements; Default curl_easy_setopt() options can be set during initialization: use LWP::Protocol::Net::Curl encoding => '', # use HTTP compression by default referer => 'http://google.com/', verbose => 1; # make libcurl print lots of stuff to STDERR Options set this way have the lowest precedence. For instance, if WWW::Mechanize sets the *Referer:* by it's own, the value you defined above won't be used. DEBUGGING Quickly enable libcurl *verbose* mode via "PERL5OPT" environment variable: PERL5OPT=-MLWP::Protocol::Net::Curl=verbose,1 perl your-script.pl Bonus: it works even if you don't include the "use LWP::Protocol::Net::Curl" line! TODO * better implementation for non-HTTP protocols * more tests * expose the inner guts of libcurl while handling encoding/redirects internally * revise Net::Curl::Multi "event loop" code BUGS * sometimes still complains about *Attempt to free unreferenced scalar: SV 0xdeadbeef during global destruction.* * in "async mode", each LWP::UserAgent instance "blocks" until all requests finish * parallel requests via Coro::Select are very inefficient; consider using YADA if you're into event-driven parallel user agents * Net::Curl::Share support is disabled on threaded Perl builds SEE ALSO * LWP::Protocol::GHTTP - used as a reference for LWP::Protocol implementation * LWP::Protocol::AnyEvent::http - another LWP::Protocol reference * YADA - Net::Curl usage reference * Net::Curl - backend for this module * LWP::Curl - provides LWP::UserAgent-compatible API via WWW::Curl AUTHOR Stanislaw Pusep COPYRIGHT AND LICENSE This software is copyright (c) 2012 by Stanislaw Pusep. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.