NAME

Net::Curl::Simple - simplifies Net::Curl::Easy interface

SYNOPSIS

use Net::Curl::Simple;

Net::Curl::Simple->new->get( $uri, \&finished );

sub finished
{
    my ( $curl, $result ) = @_;
    print "document body: $curl->{body}\n";

    # reuse connection to get another file
    $curl->get( '/other_file', \&finished2 );
}

sub finished2 { }

DESCRIPTION

Net::Curl::Simple is a thin layer over Net::Curl::Easy. It simplifies many common tasks, while providing access to full power of Net::Curl::Easy when its needed.

Net::Curl excells in asynchronous operations, thanks to a great design of libcurl(3). To take advantage of that power Net::Curl::Simple interface uses callbacks even in synchronous mode, this should allow to quickly switch to async when the time comes. Of course there is nothing to stop you to use Net::Curl::Simple::Async from the beginning.

CONSTRUCTOR

new( [PERMANENT_OPTIONS] )

Creates new Net::Curl::Simple object.

my $curl = Net::Curl::Simple->new( timeout => 60 );

METHODS

setopt( NAME, VALUE, [TEMPORARY] )

Set some option. Either permanently or only for next request if TEMPORARY is true.

setopts( PERMANENT_OPTIONS )

Set multiple options, permanently.

setopts_temp( TEMPORARY_OPTIONS )

Set multiple options, only for next request.

getinfo( NAME )

Get connection information.

my $value = $curl->getinfo( 'effective_url' );
getinfos( INFO_NAMES )

Get multiple getinfo values.

my ( $v1, $v2 ) ) $curl->getinfos( 'name1', 'name2' );
ua

Get parent Net::Curl::Simple::UserAgent object.

get( URI, [TEMPORARY_OPTIONS], CALLBACK )

Issue a GET request. CALLBACK will be called upon finishing with two arguments: Net::Curl::Simple object and the result value. If URI is incomplete, full uri will be constructed using $curl->{referer} as base. Net::Curl::Simple updates $curl->{referer} after every request. TEMPORARY_OPTIONS will be set for this request only.

$curl->get( "http://full.uri/", sub {
    my $curl = shift;
    my $result = shift;
    die "get() failed: $result\n" unless $result == 0;

    $curl->get( "/partial/uri", sub {} );
} );
head( URI, [TEMPORARY_OPTIONS], CALLBACK )

Issue a HEAD request. Otherwise it is exactly the same as get().

post( URI, POST, [TEMPORARY_OPTIONS], CALLBACK )

Issue a POST request. POST value can be either a scalar, in which case it will be sent literally, a HASHREF - will be uri-encoded, or a Net::Curl::Form object (Net::Curl::Simple::Form is OK as well).

 $curl->post( $uri,
     { username => "foo", password => "bar" },
	 \&finished
 );
put( URI, PUTDATA, [TEMPORARY_OPTIONS], CALLBACK )

Issue a PUT request. PUTDATA value can be either a file name, in which case the file contents will be uploaded, a SCALARREF -- refered data will be uploaded, or a CODEREF -- sub will be called like a CURLOPT_READFUNCTION from Net::Curl::Easy, you should specify "infilesize" option in the last case.

 $curl1->put( $uri, "filename", \&finished );
 $curl2->put( $uri, \"some data", \&finished );
 $curl3->put( $uri, sub {
         my ( $curl, $maxsize, $uservar ) = @_;
		 read STDIN, my ( $r ), $maxsize;
		 return \$r;
     },
     infilesize => EXPECTED_SIZE,
	 \&finished
 );

OPTIONS

Options can be either CURLOPT_* values (import them from Net::Curl::Easy), or literal names, preferably in lower case, without the CURLOPT_ preffix. For description of available options see curl_easy_setopt(3).

Names for getinfo can also be either CURLINFO_* values or literal names without CURLINFO_ preffix.

SEE ALSO

Net::Curl::Simple::UserAgent Net::Curl::Simple::Async Net::Curl::Easy

COPYRIGHT

Copyright (c) 2011 Przemyslaw Iskra <sparky at pld-linux.org>.

This program is free software; you can redistribute it and/or modify it under the same terms as perl itself.