LWP::Protocol::Coro::http - Coro-friendly HTTP/HTTPS/SOCKS backend for LWP


Version 1.14.0


    # Make HTTP and HTTPS requests Coro-friendly.
    use LWP::Protocol::Coro::http;

    # Or LWP::Simple, WWW::Mechanize, etc
    use LWP::UserAgent;

    # A reason to want LWP friendly to event loops.
    use Coro qw( async );

    for my $url (@urls) {
        async {
            my $ua = LWP::UserAgent->new();
            $ua->protocols_allowed([qw( http https )]);  # The only protocols made safe.

            process( $ua->get($url) );

    # Using a worker pool model to fetch web pages in parallel.

    use Coro                      qw( async );
    use Coro::Channel             qw( );
    use LWP::Protocol::Coro::http qw( );
    use LWP::UserAgent            qw( );

    my $num_workers = 10;

    my $q = Coro::Channel->new();

    my @threads;
    for (1..$num_workers) {
        push @threads, async {
            my $ua = LWP::UserAgent->new();
            $ua->protocols_allowed([qw( http https )]);

            while (my $url = $q->get()) {

    while (my $url = get_next_url()) {

    $_->join() for @threads;


Coro is a cooperating multitasking system. This means it requires some amount of cooperation on the part of user code in order to provide parallelism.

This module makes LWP more cooperative by plugging in an HTTP, HTTPS and SOCKS protocol implementor powered by AnyEvent::HTTP.

In short, it allows AnyEvent callbacks and Coro threads to execute when LWP is blocked. (Please let me know at <> what other system this helps so I can add tests and add a mention.)

All LWP features and configuration options should still be available when using this module.


The following protocols are supported:

  • https: request and proxy

  • http: request and proxy

  • socks: alias for socks5

  • socks5: proxy only

  • socks4a: proxy only

  • socks4: proxy only


Only the following ssl_opts are currently supported:

  • verify_hostname

  • SSL_verify_mode

    Only partially supported. Unspecified or VERIFY_NONE disables verification, anything else enables it.

  • SSL_verifycn_scheme

    Only www is supported. Any other value is ignored.

  • SSL_ca_file

  • SSL_ca_path

  • SSL_cert_file

  • SSL_cert

  • SSL_key_file

  • SSL_key

As with LWP::Protocol::https, if hostname verification is requested by LWP::UserAgent's ssl_opts, and neither SSL_ca_file nor SSL_ca_path is set, then SSL_ca_file is implied to be the one provided by Mozilla::CA.

The maintainer will be happy to add support for additional options.



Please report any bugs or feature requests to bug-LWP-Protocol-Coro-http at, or through the web interface at I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.


You can find documentation for this module with the perldoc command.

    perldoc LWP::Protocol::Coro::http

You can also look for information at:


Eric Brine, <>, Maintainer

Max Maischein, <>

Graham Barr, <>


No rights reserved.

The author has dedicated the work to the Commons by waiving all of his or her rights to the work worldwide under copyright law and all related or neighboring legal rights he or she had in the work, to the extent allowable by law.

Works under CC0 do not require attribution. When citing the work, you should not imply endorsement by the author.