NAME
    LWP::Protocol::Net::Curl - the power of libcurl in the palm of your
    hands!
VERSION
    version 0.026
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
    Or during runtime, using special HTTP headers (prefixed by X-CurlOpt-):
        use LWP::Protocol::Net::Curl;
        use LWP::UserAgent;
    
        my $ua = LWP::UserAgent->new;
        my $res = $ua->get(
            'https://metacpan.org/',
            X_CurlOpt_Verbose => 1,
        );
    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) 2014 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.
CONTRIBUTORS
      * José Joaquín Atria 
      * Nick Kostyria 
      * Peter Williams