Skip to content
create a HTTP::Request from a curl command line
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib/HTTP/Request
script
t
xt
.gitignore
.travis.yml
Changes
LICENSE
MANIFEST
MANIFEST.SKIP
META.json
META.yml
Makefile.PL
README
README.mkdn

README.mkdn

Travis Build Status AppVeyor Build Status

NAME

HTTP::Request::FromCurl - create a HTTP::Request from a curl command line

SYNOPSIS

my $req = HTTP::Request::FromCurl->new(
    # Note - curl itself may not appear
    argv => ['https://example.com'],
);

my $req = HTTP::Request::FromCurl->new(
    command => 'https://example.com',
);

my $req = HTTP::Request::FromCurl->new(
    command_curl => 'curl -A mycurl/1.0 https://example.com',
);

my @requests = HTTP::Request::FromCurl->new(
    command_curl => 'curl -A mycurl/1.0 https://example.com https://www.example.com',
);
# Send the requests
for my $r (@requests) {
    $ua->request( $r->as_request )
}

METHODS

->new

my $req = HTTP::Request::FromCurl->new(
    # Note - curl itself may not appear
    argv => ['--agent', 'myscript/1.0', 'https://example.com'],
);

my $req = HTTP::Request::FromCurl->new(
    # Note - curl itself may not appear
    command => '--agent myscript/1.0 https://example.com',
);

The constructor returns one or more HTTP::Request::CurlParameters objects that encapsulate the parameters. If the command generates multiple requests, they will be returned in list context. In scalar context, only the first request will be returned.

my $req = HTTP::Request::FromCurl->new(
    command => '--data-binary @/etc/passwd https://example.com',
    read_files => 1,
);

Options

  • argv

    An arrayref of commands as could be given in @ARGV.

  • command

    A scalar in a command line, excluding the curl command

  • command_curl

    A scalar in a command line, including the curl command

  • read_files

    Do read in the content of files specified with (for example) --data=@/etc/passwd. The default is to not read the contents of files specified this way.

->squash_uri( $uri )

my $uri = HTTP::Request::FromCurl->squash_uri(
    URI->new( 'https://example.com/foo/bar/..' )
);
# https://example.com/foo/

Helper method to clean up relative path elements from the URI the same way that curl does.

GLOBAL VARIABLES

%default_headers

Contains the default headers added to every request

@option_spec

Contains the Getopt::Long specification of the recognized command line parameters.

The following curl options are recognized but ignored:

  • --dump-header
  • --include
  • --location
  • --progress-bar
  • --silent
  • --verbose

LIVE DEMO

https://corion.net/curl2lwp.psgi

KNOWN DIFFERENCES

Incompatible cookie jar formats

Until somebody writes a robust Netscape cookie file parser and proper loading and storage for HTTP::CookieJar, this module will not be able to load and save files in the format that Curl uses.

Loading/saving cookie jars is the job of the UA

You're expected to instruct your UA to load/save cookie jars:

use Path::Tiny;
use HTTP::CookieJar::LWP;

if( my $cookies = $r->cookie_jar ) {
    $ua->cookie_jar( HTTP::CookieJar::LWP->new()->load_cookies(
        path($cookies)->lines
    ));
};

Different Content-Length for POST requests

Different delimiter for form data

The delimiter is built by HTTP::Message, and curl uses a different mechanism to come up with a unique data delimiter. This results in differences in the raw body content and the Content-Length header.

MISSING FUNCTIONALITY

  • File uploads / content from files

    While file uploads and reading POST data from files are supported, the content is slurped into memory completely. This can be problematic for large files and little available memory.

  • Multiple sets of parameters from the command line

    Curl supports the --next command line switch which resets parameters for the next URL.

    This is not (yet) supported.

SEE ALSO

LWP::Curl

LWP::Protocol::Net::Curl

LWP::CurlLog

HTTP::Request::AsCurl - for the inverse function

REPOSITORY

The public repository of this module is http://github.com/Corion/HTTP-Request-FromCurl.

SUPPORT

The public support forum of this module is https://perlmonks.org/.

BUG TRACKER

Please report bugs in this module via the RT CPAN bug queue at https://rt.cpan.org/Public/Dist/Display.html?Name=HTTP-Request-FromCurl or via mail to filter-signatures-Bugs@rt.cpan.org.

AUTHOR

Max Maischein corion@cpan.org

COPYRIGHT (c)

Copyright 2018 by Max Maischein corion@cpan.org.

LICENSE

This module is released under the same terms as Perl itself.

You can’t perform that action at this time.