{"id":14990036,"url":"https://github.com/creaktive/lwp-protocol-net-curl","last_synced_at":"2025-07-14T15:34:31.023Z","repository":{"id":5195368,"uuid":"6370451","full_name":"creaktive/LWP-Protocol-Net-Curl","owner":"creaktive","description":"let's make LWP great again!","archived":false,"fork":false,"pushed_at":"2025-01-21T10:55:29.000Z","size":90,"stargazers_count":14,"open_issues_count":1,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-19T10:25:13.334Z","etag":null,"topics":["curl","libcurl","libwww-perl","lwp","perl"],"latest_commit_sha":null,"homepage":"https://metacpan.org/module/LWP::Protocol::Net::Curl","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"opencfp/opencfp","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/creaktive.png","metadata":{"files":{"readme":"README.pod","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2012-10-24T13:37:35.000Z","updated_at":"2025-01-21T10:55:34.000Z","dependencies_parsed_at":"2025-04-12T02:03:33.875Z","dependency_job_id":"4f420827-3cd0-4e2a-8e1c-080d692d62dd","html_url":"https://github.com/creaktive/LWP-Protocol-Net-Curl","commit_stats":null,"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/creaktive/LWP-Protocol-Net-Curl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creaktive%2FLWP-Protocol-Net-Curl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creaktive%2FLWP-Protocol-Net-Curl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creaktive%2FLWP-Protocol-Net-Curl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creaktive%2FLWP-Protocol-Net-Curl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/creaktive","download_url":"https://codeload.github.com/creaktive/LWP-Protocol-Net-Curl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/creaktive%2FLWP-Protocol-Net-Curl/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265312309,"owners_count":23745179,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["curl","libcurl","libwww-perl","lwp","perl"],"created_at":"2024-09-24T14:19:22.044Z","updated_at":"2025-07-14T15:34:30.994Z","avatar_url":"https://github.com/creaktive.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"=pod\n\n=encoding UTF-8\n\n=head1 NAME\n\nLWP::Protocol::Net::Curl - the power of libcurl in the palm of your hands!\n\n=head1 VERSION\n\nversion 0.027\n\n=head1 SYNOPSIS\n\n    #!/usr/bin/env perl;\n    use common::sense;\n\n    use LWP::Protocol::Net::Curl;\n    use WWW::Mechanize;\n\n    ...\n\n=head1 DESCRIPTION\n\nDrop-in replacement for L\u003cLWP\u003e, L\u003cWWW::Mechanize\u003e and their derivatives to use L\u003cNet::Curl\u003e as a backend.\n\nAdvantages:\n\n=over 4\n\n=item *\n\nsupport ftp/ftps/http/https/sftp/scp protocols out-of-box (secure layer require L\u003clibcurl|http://curl.haxx.se/\u003e to be compiled with TLS/SSL/libssh2 support)\n\n=item *\n\nsupport SOCKS4/5 proxy out-of-box\n\n=item *\n\nconnection persistence and DNS cache (independent from L\u003cLWP::ConnCache\u003e)\n\n=item *\n\nlightning-fast L\u003cHTTP compression|https://en.wikipedia.org/wiki/Http_compression\u003e and redirection\n\n=item *\n\nlower CPU usage: this matters if you C\u003cfork()\u003e multiple downloader instances\n\n=item *\n\nasynchronous threading via L\u003cCoro::Select\u003e (see F\u003ceg/async.pl\u003e)\n\n=item *\n\nat last but not least: B\u003c100% compatible\u003e with both L\u003cLWP\u003e and L\u003cWWW::Mechanize\u003e test suites!\n\n=back\n\n=head1 LIBCURL INTERFACE\n\nYou may query which L\u003cLWP\u003e protocols are implemented through L\u003cNet::Curl\u003e by accessing C\u003c@LWP::Protocol::Net::Curl::implements\u003e or C\u003c%LWP::Protocol::Net::Curl::implements\u003e.\n\nBy default, B\u003cevery protocol\u003e listed in that array will be implemented via L\u003cLWP::Protocol::Net::Curl\u003e.\nIt is possible to import only specific protocols:\n\n    use LWP::Protocol::Net::Curl takeover =\u003e 0;\n    LWP::Protocol::implementor(https =\u003e 'LWP::Protocol::Net::Curl');\n\nThe default value of C\u003ctakeover\u003e option is I\u003ctrue\u003e, resulting in exactly the same behavior as in:\n\n    use LWP::Protocol::Net::Curl takeover =\u003e 0;\n    LWP::Protocol::implementor($_ =\u003e 'LWP::Protocol::Net::Curl')\n        for @LWP::Protocol::Net::Curl::implements;\n\nDefault L\u003ccurl_easy_setopt() options|http://curl.haxx.se/libcurl/c/curl_easy_setopt.html\u003e can be set during initialization:\n\n    use LWP::Protocol::Net::Curl\n        encoding    =\u003e '',  # use HTTP compression by default\n        referer     =\u003e 'http://google.com/',\n        verbose     =\u003e 1;   # make libcurl print lots of stuff to STDERR\n\nOr during runtime, using special HTTP headers (prefixed by C\u003cX-CurlOpt-\u003e):\n\n    use LWP::Protocol::Net::Curl;\n    use LWP::UserAgent;\n\n    my $ua = LWP::UserAgent-\u003enew;\n    my $res = $ua-\u003eget(\n        'https://metacpan.org/',\n        X_CurlOpt_Verbose =\u003e 1,\n    );\n\nOptions set this way have the lowest precedence.\nFor instance, if L\u003cWWW::Mechanize\u003e sets the I\u003cReferer:\u003e by it's own, the value you defined above won't be used.\n\n=head1 DEBUGGING\n\nQuickly enable libcurl I\u003cverbose\u003e mode via C\u003cPERL5OPT\u003e environment variable:\n\n    PERL5OPT=-MLWP::Protocol::Net::Curl=verbose,1 perl your-script.pl\n\nB\u003cBonus:\u003e it works even if you don't include the C\u003cuse LWP::Protocol::Net::Curl\u003e line!\n\n=for Pod::Coverage import\nrequest\n\n=head1 TODO\n\n=over 4\n\n=item *\n\nbetter implementation for non-HTTP protocols\n\n=item *\n\nmore tests\n\n=item *\n\nexpose the inner guts of libcurl while handling encoding/redirects internally\n\n=item *\n\nrevise L\u003cNet::Curl::Multi\u003e \"event loop\" code\n\n=back\n\n=head1 BUGS\n\n=over 4\n\n=item *\n\nsometimes still complains about I\u003cAttempt to free unreferenced scalar: SV 0xdeadbeef during global destruction.\u003e\n\n=item *\n\nin \"async mode\", each L\u003cLWP::UserAgent\u003e instance \"blocks\" until all requests finish\n\n=item *\n\nparallel requests via L\u003cCoro::Select\u003e are B\u003cvery inefficient\u003e; consider using L\u003cYADA\u003e if you're into event-driven parallel user agents\n\n=item *\n\nL\u003cNet::Curl::Share\u003e support is disabled on threaded Perl builds\n\n=back\n\n=head1 SEE ALSO\n\n=over 4\n\n=item *\n\nL\u003cLWP::Protocol::GHTTP\u003e - used as a reference for L\u003cLWP::Protocol\u003e implementation\n\n=item *\n\nL\u003cLWP::Protocol::AnyEvent::http\u003e - another L\u003cLWP::Protocol\u003e reference\n\n=item *\n\nL\u003cYADA\u003e - L\u003cNet::Curl\u003e usage reference\n\n=item *\n\nL\u003cNet::Curl\u003e - backend for this module\n\n=item *\n\nL\u003cLWP::Curl\u003e - provides L\u003cLWP::UserAgent\u003e-compatible API via L\u003cWWW::Curl\u003e\n\n=back\n\n=head1 AUTHOR\n\nStanislaw Pusep \u003cstas@sysd.org\u003e\n\n=head1 COPYRIGHT AND LICENSE\n\nThis software is copyright (c) 2025 by Stanislaw Pusep.\n\nThis is free software; you can redistribute it and/or modify it under\nthe same terms as the Perl 5 programming language system itself.\n\n=head1 CONTRIBUTORS\n\n=for stopwords José Joaquín Atria Nick Kostyria Peter Williams\n\n=over 4\n\n=item *\n\nJosé Joaquín Atria \u003cjjatria@gmail.com\u003e\n\n=item *\n\nNick Kostyria \u003ckostirya@gmail.com\u003e\n\n=item *\n\nPeter Williams \u003cpjwilliams@gmail.com\u003e\n\n=back\n\n=cut\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcreaktive%2Flwp-protocol-net-curl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcreaktive%2Flwp-protocol-net-curl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcreaktive%2Flwp-protocol-net-curl/lists"}