Net-Curl
view release on metacpan or search on metacpan
lib/Net/Curl/Easy.pm view on Meta::CPAN
The address structure has following numeric values: "family", "socktype",
"protocol"; and "addr" in binary form. Use Socket module to
decode "addr" field. You are also allowed to change those values.
Callback must return fileno of the socket or CURL_SOCKET_BAD on error.
use Socket;
sub cb_opensocket {
my ( $easy, $purpose, $address, $uservar ) = @_;
# decode addr information
my ( $port, $ip ) = unpack_sockaddr_in( $address->{addr} );
my $ip_string = inet_ntoa( $ip );
# open the socket
socket my $socket, $address->{family}, $address->{socktype},
$address->{protocol};
# save it somewhere so perl won't close the socket
$opened_sockets{ fileno( $socket ) } = $socket;
# return the socket
return fileno $socket;
}
=item CURLOPT_CLOSESOCKETFUNCTION ( CURLOPT_CLOSESOCKETDATA ) 7.21.7+
closesocket callback receives 3 arguments: easy object, socket fileno,
and CURLOPT_CLOSESOCKETDATA value.
sub cb_closesocket {
my ( $easy, $fileno, $uservar ) = @_;
my $socket = delete $opened_sockets{ $fileno };
close $socket;
}
=item CURLOPT_PROGRESSFUNCTION ( CURLOPT_PROGRESSDATA )
Progress callback receives 6 arguments: easy object, dltotal, dlnow, ultotal,
ulnow and CURLOPT_PROGRESSDATA value. It should return 0.
sub cb_progress {
my ( $easy, $dltotal, $dlnow, $ultotal, $ulnow, $uservar ) = @_;
# ... display progress ...
return 0;
}
Since CURLOPT_XFERINFODATA is an alias to CURLOPT_PROGRESSDATA,
they both set the same callback data for both
CURLOPT_PROGRESSFUNCTION and CURLOPT_PROGRESSFUNCTION callbacks.
=item CURLOPT_XFERINFOFUNCTION ( CURLOPT_XFERINFODATA ) 7.32.0+
Works exactly like CURLOPT_PROGRESSFUNCTION callback, except that dltotal, dlnow, ultotal
and ulnow are now integer values instead of double.
Since CURLOPT_XFERINFODATA is an alias to CURLOPT_PROGRESSDATA,
they both set the same callback data for both
CURLOPT_PROGRESSFUNCTION and CURLOPT_PROGRESSFUNCTION callbacks.
=item CURLOPT_HEADERFUNCTION ( CURLOPT_WRITEHEADER )
Behaviour is the same as in write callback. Callback is called once for
every header line.
=item CURLOPT_DEBUGFUNCTION ( CURLOPT_DEBUGDATA )
Debug callback receives 4 arguments: easy object, message type, debug data
and CURLOPT_DEBUGDATA value. Must return 0.
sub cb_debug {
my ( $easy, $type, $data, $uservar ) = @_;
# ... display debug info ...
return 0;
}
=item CURLOPT_SSL_CTX_FUNCTION ( CURLOPT_SSL_CTX_DATA )
Not supported, probably will never be.
=item CURLOPT_INTERLEAVEFUNCTION ( CURLOPT_INTERLEAVEDATA ) 7.20.0+
Behaviour is the same as in write callback.
=item CURLOPT_CHUNK_BGN_FUNCTION ( CURLOPT_CHUNK_DATA ) 7.21.0+
chunk_bgn callback receives 4 arguments: easy object, fileinfo structure (in
form of a hashref), number of remaining chunks, and CURLOPT_CHUNK_DATA value.
It must return one of CURL_CHUNK_BGN_FUNC_* values.
sub cb_chunk_bgn {
my ( $easy, $fileinfo, $remaining, $uservar ) = @_;
if ( exists $fileinfo->{filetype} and
$fileinfo->{filetype} != CURLFILETYPE_FILE ) {
# download regular files only
return CURL_CHUNK_BGN_FUNC_SKIP;
}
my $filename = "unknown." . $remaining;
$filename = $fileinfo->{filename}
if defined $fileinfo->{filename};
open $easy->{myfile}, '>', $filename
or return CURL_CHUNK_BGN_FUNC_FAIL;
return CURL_CHUNK_BGN_FUNC_OK;
}
=item CURLOPT_CHUNK_END_FUNCTION ( CURLOPT_CHUNK_DATA ) 7.21.0+
chunk_end callback receives 2 arguments: easy object and CURLOPT_CHUNK_DATA
value. Must return one of CURL_CHUNK_END_FUNC_* values.
sub cb_chunk_end {
my ( $easy, $uservar ) = @_;
# ... close $easy-{myfile} ...
return CURL_CHUNK_END_FUNC_OK;
}
=item CURLOPT_FNMATCH_FUNCTION ( CURLOPT_FNMATCH_DATA ) 7.21.0+
( run in 2.068 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )