libcurl Manual curleasysetopt(3)
NAME
curleasysetopt - set options for a curl easy handle
SYNOPSIS
#include
CURLcode curleasysetopt(CURL *handle, CURLoption option,
parameter);
DESCRIPTION
curleasysetopt() is used to tell libcurl how to behave. By
using the appropriate options to curleasysetopt, you can
change libcurl's behavior. All options are set with the
option followed by a parameter. That parameter can be a
long, a function pointer, an object pointer or a curlofft,
depending on what the specific option expects. Read this
manual carefully as bad input values may cause libcurl to
behave badly! You can only set one option in each function
call. A typical application uses many curleasysetopt()
calls in the setup phase.
Options set with this function call are valid for all forth-
coming transfers performed using this handle. The options
are not in any way reset between transfers, so if you want
subsequent transfers with different options, you must change
them between the transfers. You can optionally reset all
options back to internal default with curleasyreset(3).
Strings passed to libcurl as 'char *' arguments, are copied
by the library; thus the string storage associated to the
pointer argument may be overwritten after curleasysetopt()
returns. Exceptions to this rule are described in the option
details below.
NOTE: before 7.17.0 strings were not copied. Instead the
user was forced keep them available until libcurl no longer
needed them.
The handle is the return code from a curleasyinit(3) or
curleasyduphandle(3) call.
BEHAVIOR OPTIONS
CURLOPTVERBOSE
Set the parameter to 1 to get the library to display a
lot of verbose information about its operations. Very
useful for libcurl and/or protocol debugging and under-
standing. The verbose information will be sent to
stderr, or the stream set with CURLOPTSTDER.
You hardly ever want this set in production use, you
will almost always want this when you debug/report
problems. Another neat option for debugging is the
libcurl 7.19.3 Last change: 11 Dec 2008 1
libcurl Manual curleasysetopt(3)
CURLOPTDEBUGFUNCTION.
CURLOPTHEADER
A parameter set to 1 tells the library to include the
header in the body output. This is only relevant for
protocols that actually have headers preceding the data
(like HTP).
CURLOPTNOPROGRES
A parameter set to 1 tells the library to shut off the
built-in progress meter completely.
Future versions of libcurl are likely to not have any
built-in progress meter at all.
CURLOPTNOSIGNAL
Pass a long. If it is 1, libcurl will not use any func-
tions that install signal handlers or any functions
that cause signals to be sent to the process. This
option is mainly here to allow multi-threaded unix
applications to still set/use all timeout options etc,
without risking getting signals. (Added in 7.10)
If this option is set and libcurl has been built with
the standard name resolver, timeouts will not occur
while the name resolve takes place. Consider building
libcurl with c-ares support to enable asynchronous DNS
lookups, which enables nice timeouts for name resolves
without signals.
CALBACK OPTIONS
CURLOPTWRITEFUNCTION
Function pointer that should match the following proto-
type: sizet function( void *ptr, sizet size, sizet
nmemb, void *stream); This function gets called by lib-
curl as soon as there is data received that needs to be
saved. The size of the data pointed to by ptr is size
multiplied with nmemb, it will not be zero terminated.
Return the number of bytes actually taken care of. If
that amount differs from the amount passed to your
function, it'll signal an error to the library and it
will abort the transfer and return CURLEWRITEROR.
From 7.18.0, the function can return
CURLWRITEFUNCPAUSE which then will cause writing to
this connection to become paused. See
curleasypause(3) for further details.
This function may be called with zero bytes data if the
transferred file is empty.
Set this option to NUL to get the internal default
libcurl 7.19.3 Last change: 11 Dec 2008 2
libcurl Manual curleasysetopt(3)
function. The internal default function will write the
data to the FILE * given with CURLOPTWRITEDATA.
Set the stream argument with the CURLOPTWRITEDATA
option.
The callback function will be passed as much data as
possible in all invokes, but you cannot possibly make
any assumptions. It may be one byte, it may be
thousands. The maximum amount of data that can be
passed to the write callback is defined in the curl.h
header file: CURLMAXWRITESIZE.
CURLOPTWRITEDATA
Data pointer to pass to the file write function. If you
use the CURLOPTWRITEFUNCTION option, this is the
pointer you'll get as input. If you don't use a call-
back, you must pass a 'FILE *' as libcurl will pass
this to fwrite() when writing data.
The internal CURLOPTWRITEFUNCTION will write the data
to the FILE * given with this option, or to stdout if
this option hasn't been set.
If you're using libcurl as a win32 DL, you MUST use
the CURLOPTWRITEFUNCTION if you set this option or you
will experience crashes.
This option is also known with the older name
CURLOPTFILE, the name CURLOPTWRITEDATA was introduced
in 7.9.7.
CURLOPTREADFUNCTION
Function pointer that should match the following proto-
type: sizet function( void *ptr, sizet size, sizet
nmemb, void *stream); This function gets called by lib-
curl as soon as it needs to read data in order to send
it to the peer. The data area pointed at by the pointer
ptr may be filled with at most size multiplied with
nmemb number of bytes. Your function must return the
actual number of bytes that you stored in that memory
area. Returning 0 will signal end-of-file to the
library and cause it to stop the current transfer.
If you stop the current transfer by returning 0 "pre-
maturely" (i.e before the server expected it, like when
you've said you will upload N bytes and you upload less
than N bytes), you may experience that the server
"hangs" waiting for the rest of the data that won't
come.
The read callback may return CURLREADFUNCABORT to
libcurl 7.19.3 Last change: 11 Dec 2008 3
libcurl Manual curleasysetopt(3)
stop the current operation immediately, resulting in a
CURLEABORTEDBYCALBACK error code from the transfer
(Added in 7.12.1)
From 7.18.0, the function can return
CURLREADFUNCPAUSE which then will cause reading from
this connection to become paused. See
curleasypause(3) for further details.
If you set the callback pointer to NUL, or don't set
it at all, the default internal read function will be
used. It is simply doing an fread() on the FILE *
stream set with CURLOPTREADATA.
CURLOPTREADATA
Data pointer to pass to the file read function. If you
use the CURLOPTREADFUNCTION option, this is the
pointer you'll get as input. If you don't specify a
read callback but instead rely on the default internal
read function, this data must be a valid readable FILE
*.
If you're using libcurl as a win32 DL, you MUST use a
CURLOPTREADFUNCTION if you set this option.
This option was also known by the older name
CURLOPTINFILE, the name CURLOPTREADATA was intro-
duced in 7.9.7.
CURLOPTIOCTLFUNCTION
Function pointer that should match the
curlioctlcallback prototype found in .
This function gets called by libcurl when something
special I/O-related needs to be done that the library
can't do by itself. For now, rewinding the read data
stream is the only action it can request. The rewinding
of the read data stream may be necessary when doing a
HTP PUT or POST with a multi-pass authentication
method. (Option added in 7.12.3).
Use CURLOPTSEKFUNCTION instead to provide seeking!
CURLOPTIOCTLDATA
Pass a pointer that will be untouched by libcurl and
passed as the 3rd argument in the ioctl callback set
with CURLOPTIOCTLFUNCTION. (Option added in 7.12.3)
CURLOPTSEKFUNCTION
Function pointer that should match the following proto-
type: int function(void *instream, curlofft offset,
int origin); This function gets called by libcurl to
seek to a certain position in the input stream and can
libcurl 7.19.3 Last change: 11 Dec 2008 4
libcurl Manual curleasysetopt(3)
be used to fast forward a file in a resumed upload
(instead of reading all uploaded bytes with the normal
read function/callback). It is also called to rewind a
stream when doing a HTP PUT or POST with a multi-pass
authentication method. The function shall work like
"fseek" or "lseek" and accepted SEKSET, SEKCUR and
SEKEND as argument for origin, although (in 7.18.0)
libcurl only passes SEKSET. The callback must return
0 on success as returning something else will cause the
upload operation to fail.
If you forward the input arguments directly to "fseek"
or "lseek", note that the data type for offset is not
the same as defined for curlofft on many systems!
(Option added in 7.18.0)
CURLOPTSEKDATA
Data pointer to pass to the file read function. If you
use the CURLOPTSEKFUNCTION option, this is the
pointer you'll get as input. If you don't specify a
seek callback, NUL is passed. (Option added in 7.18.0)
CURLOPTSOCKOPTFUNCTION
Function pointer that should match the
curlsockoptcallback prototype found in .
This function gets called by libcurl after the socket()
call but before the connect() call. The callback's pur-
pose argument identifies the exact purpose for this
particular socket, and currently only one value is sup-
ported: CURLSOCKTYPEIPCXN for the primary connection
(meaning the control connection in the FTP case).
Future versions of libcurl may support more purposes.
It passes the newly created socket descriptor so addi-
tional setsockopt() calls can be done at the user's
discretion. A non-zero return code from the callback
function will signal an unrecoverable error to the
library and it will close the socket and return
CURLECOULDNTCONECT. (Option added in 7.15.6.)
CURLOPTSOCKOPTDATA
Pass a pointer that will be untouched by libcurl and
passed as the first argument in the sockopt callback
set with CURLOPTSOCKOPTFUNCTION. (Option added in
7.15.6.)
CURLOPTOPENSOCKETFUNCTION
Function pointer that should match the
curlopensocketcallback prototype found in
. This function gets called by libcurl
instead of the socket(2) call. The callback's purpose
argument identifies the exact purpose for this particu-
lar socket, and currently only one value is supported:
libcurl 7.19.3 Last change: 11 Dec 2008 5
libcurl Manual curleasysetopt(3)
CURLSOCKTYPEIPCXN for the primary connection (meaning
the control connection in the FTP case). Future ver-
sions of libcurl may support more purposes. It passes
the resolved peer address as a address argument so the
callback can modify the address or refuse to connect at
all. The callback function should return the socket or
CURLSOCKETBAD in case no connection should be esta-
blished or any error detected. Any additional set-
sockopt(2) calls can be done on the socket at the
user's discretion. CURLSOCKETBAD return value from
the callback function will signal an unrecoverable
error to the library and it will return
CURLECOULDNTCONECT. This return code can be used
for IP address blacklisting. The default behavior is:
return socket(addr->family, addr->socktype, addr-
>protocol); (Option added in 7.17.1.)
CURLOPTOPENSOCKETDATA
Pass a pointer that will be untouched by libcurl and
passed as the first argument in the opensocket callback
set with CURLOPTOPENSOCKETFUNCTION. (Option added in
7.17.1.)
CURLOPTPROGRESFUNCTION
Function pointer that should match the
curlprogresscallback prototype found in
. This function gets called by libcurl
instead of its internal equivalent with a frequent
interval during operation (roughly once per second) no
matter if data is being transfered or not.
Unknown/unused argument values passed to the callback
will be set to zero (like if you only download data,
the upload size will remain 0). Returning a non-zero
value from this callback will cause libcurl to abort
the transfer and return CURLEABORTEDBYCALBACK.
If you transfer data with the multi interface, this
function will not be called during periods of idleness
unless you call the appropriate libcurl function that
performs transfers.
CURLOPTNOPROGRES must be set to 0 to make this func-
tion actually get called.
CURLOPTPROGRESDATA
Pass a pointer that will be untouched by libcurl and
passed as the first argument in the progress callback
set with CURLOPTPROGRESFUNCTION.
CURLOPTHEADERFUNCTION
Function pointer that should match the following proto-
type: sizet function( void *ptr, sizet size, sizet
libcurl 7.19.3 Last change: 11 Dec 2008 6
libcurl Manual curleasysetopt(3)
nmemb, void *stream);. This function gets called by
libcurl as soon as it has received header data. The
header callback will be called once for each header and
only complete header lines are passed on to the call-
back. Parsing headers should be easy enough using this.
The size of the data pointed to by ptr is size multi-
plied with nmemb. Do not assume that the header line is
zero terminated! The pointer named stream is the one
you set with the CURLOPTWRITEHEADER option. The call-
back function must return the number of bytes actually
taken care of, or return -1 to signal error to the
library (it will cause it to abort the transfer with a
CURLEWRITEROR return code).
If this option is not set, or if it is set to NUL, but
CURLOPTHEADERDATA (CURLOPTWRITEHEADER) is set to any-
thing but NUL, the function used to accept response
data will be used instead. That is, it will be the
function specified with CURLOPTWRITEFUNCTION, or if it
is not specified or NUL - the default, stream-writing
function.
Since 7.14.1: When a server sends a chunked encoded
transfer, it may contain a trailer. That trailer is
identical to a HTP header and if such a trailer is
received it is passed to the application using this
callback as well. There are several ways to detect it
being a trailer and not an ordinary header: 1) it comes
after the response-body. 2) it comes after the final
header line (CR LF) 3) a Trailer: header among the
response-headers mention what header to expect in the
trailer.
CURLOPTWRITEHEADER
(This option is also known as CURLOPTHEADERDATA) Pass
a pointer to be used to write the header part of the
received data to. If you don't use your own callback to
take care of the writing, this must be a valid FILE *.
See also the CURLOPTHEADERFUNCTION option above on how
to set a custom get-all-headers callback.
CURLOPTDEBUGFUNCTION
Function pointer that should match the following proto-
type: int curldebugcallback (CURL *, curlinfotype,
char *, sizet, void *); CURLOPTDEBUGFUNCTION replaces
the standard debug function used when CURLOPTVERBOSE
is in effect. This callback receives debug information,
as specified with the curlinfotype argument. This
function must return 0. The data pointed to by the
char * passed to this function WIL NOT be zero ter-
minated, but will be exactly of the size as told by the
sizet argument.
libcurl 7.19.3 Last change: 11 Dec 2008 7
libcurl Manual curleasysetopt(3)
Available curlinfotype values:
CURLINFOTEXT
The data is informational text.
CURLINFOHEADERIN
The data is header (or header-like) data received
from the peer.
CURLINFOHEADEROUT
The data is header (or header-like) data sent to
the peer.
CURLINFODATAIN
The data is protocol data received from the peer.
CURLINFODATAOUT
The data is protocol data sent to the peer.
CURLOPTDEBUGDATA
Pass a pointer to whatever you want passed in to your
CURLOPTDEBUGFUNCTION in the last void * argument. This
pointer is not used by libcurl, it is only passed to
the callback.
CURLOPTSLCTXFUNCTION
This option does only function for libcurl powered by
OpenSL. If libcurl was built against another SL
library, this functionality is absent.
Function pointer that should match the following proto-
type: CURLcode sslctxfun(CURL *curl, void *sslctx, void
*parm); This function gets called by libcurl just
before the initialization of an SL connection after
having processed all other SL related options to give
a last chance to an application to modify the behaviour
of openssl's ssl initialization. The sslctx parameter
is actually a pointer to an openssl SLCTX. If an
error is returned no attempt to establish a connection
is made and the perform operation will return the error
code from this callback function. Set the parm argu-
ment with the CURLOPTSLCTXDATA option. This option
was introduced in 7.11.0.
This function will get called on all new connections
made to a server, during the SL negotiation. The
SLCTX pointer will be a new one every time.
To use this properly, a non-trivial amount of knowledge
of the openssl libraries is necessary. For example,
using this function allows you to use openssl callbacks
to add additional validation code for certificates, and
libcurl 7.19.3 Last change: 11 Dec 2008 8
libcurl Manual curleasysetopt(3)
even to change the actual URI of an HTPS request
(example used in the lib509 test case). See also the
example section for a replacement of the key, certifi-
cate and trust file settings.
CURLOPTSLCTXDATA
Data pointer to pass to the ssl context callback set by
the option CURLOPTSLCTXFUNCTION, this is the
pointer you'll get as third parameter, otherwise NUL.
(Added in 7.11.0)
CURLOPTCONVTONETWORKFUNCTION
CURLOPTCONVFROMNETWORKFUNCTION
CURLOPTCONVFROMUTF8FUNCTION
Function pointers that should match the following pro-
totype: CURLcode function(char *ptr, sizet length);
These three options apply to non-ASCI platforms only.
They are available only if CURLDOESCONVERSIONS was
defined when libcurl was built. When this is the case,
curlversioninfo(3) will return the CURLVERSIONCONV
feature bit set.
The data to be converted is in a buffer pointed to by
the ptr parameter. The amount of data to convert is
indicated by the length parameter. The converted data
overlays the input data in the buffer pointed to by the
ptr parameter. CURLEOK should be returned upon suc-
cessful conversion. A CURLcode return value defined by
curl.h, such as CURLECONVFAILED, should be returned
if an error was encountered.
CURLOPTCONVTONETWORKFUNCTION and
CURLOPTCONVFROMNETWORKFUNCTION convert between the
host encoding and the network encoding. They are used
when commands or ASCI data are sent/received over the
network.
CURLOPTCONVFROMUTF8FUNCTION is called to convert
from UTF8 into the host encoding. It is required only
for SL processing.
If you set a callback pointer to NUL, or don't set it
at all, the built-in libcurl iconv functions will be
used. If HAVEICONV was not defined when libcurl was
built, and no callback has been established, conversion
will return the CURLECONVREQD error code.
If HAVEICONV is defined, CURLICONVCODESETOFHOST
must also be defined. For example:
libcurl 7.19.3 Last change: 11 Dec 2008 9
libcurl Manual curleasysetopt(3)
#define CURLICONVCODESETOFHOST "IBM-1047"
The iconv code in libcurl will default the network and
UTF8 codeset names as follows:
#define CURLICONVCODESETOFNETWORK "ISO8859-1"
#define CURLICONVCODESETFORUTF8 "UTF-8"
You will need to override these definitions if they are
different on your system.
EROR OPTIONS
CURLOPTERORBUFER
Pass a char * to a buffer that the libcurl may store
human readable error messages in. This may be more
helpful than just the return code from
curleasyperform. The buffer must be at least
CURLERORSIZE big. Although this argument is a 'char
*', it does not describe an input string. Therefore
the (probably undefined) contents of the buffer is NOT
copied by the library. You should keep the associated
storage available until libcurl no longer needs it.
Failing to do so will cause very odd behavior or even
crashes. libcurl will need it until you call
curleasycleanup(3) or you set the same option again
to use a different pointer.
Use CURLOPTVERBOSE and CURLOPTDEBUGFUNCTION to better
debug/trace why errors happen.
If the library does not return an error, the buffer may
not have been touched. Do not rely on the contents in
those cases.
CURLOPTSTDER
Pass a FILE * as parameter. Tell libcurl to use this
stream instead of stderr when showing the progress
meter and displaying CURLOPTVERBOSE data.
CURLOPTFAILONEROR
A parameter set to 1 tells the library to fail silently
if the HTP code returned is equal to or larger than
400. The default action would be to return the page
normally, ignoring that code.
This method is not fail-safe and there are occasions
where non-successful response codes will slip through,
especially when authentication is involved (response
codes 401 and 407).
libcurl 7.19.3 Last change: 11 Dec 2008 10
libcurl Manual curleasysetopt(3)
You might get some amounts of headers transferred
before this situation is detected, like when a "100-
continue" is received as a response to a POST/PUT and a
401 or 407 is received immediately afterwards.
NETWORK OPTIONS
CURLOPTURL
The actual URL to deal with. The parameter should be a
char * to a zero terminated string.
If the given URL lacks the protocol part ("http:/" or
"ftp:/" etc), it will attempt to guess which protocol
to use based on the given host name. If the given pro-
tocol of the set URL is not supported, libcurl will
return on error (CURLEUNSUPORTEDPROTOCOL) when you
call curleasyperform(3) or curlmultiperform(3). Use
curlversioninfo(3) for detailed info on which proto-
cols are supported.
The string given to CURLOPTURL must be url-encoded and
follow RFC 2396 (http:/curl.haxx.se/rfc/rfc2396.txt).
CURLOPTURL is the only option that must be set before
curleasyperform(3) is called.
CURLOPTPROTOCOLS can be used to limit what protocols
libcurl will use for this transfer, independent of what
libcurl has been compiled to support. That may be use-
ful if you accept the URL from an external source and
want to limit the accessibility.
CURLOPTPROTOCOLS
Pass a long that holds a bitmask of CURLPROTO*
defines. If used, this bitmask limits what protocols
libcurl may use in the transfer. This allows you to
have a libcurl built to support a wide range of proto-
cols but still limit specific transfers to only be
allowed to use a subset of them. By default libcurl
will accept all protocols it supports. See also
CURLOPTREDIRPROTOCOLS. (Added in 7.19.4)
CURLOPTREDIRPROTOCOLS
Pass a long that holds a bitmask of CURLPROTO*
defines. If used, this bitmask limits what protocols
libcurl may use in a transfer that it follows to in a
redirect when CURLOPTFOLOWLOCATION is enabled. This
allows you to limit specific transfers to only be
allowed to use a subset of protocols in redirections.
By default libcurl will allow all protocols except for
FILE and SCP. This is a difference compared to pre-
7.19.4 versions which unconditionally would follow to
all protocols supported. (Added in 7.19.4)
libcurl 7.19.3 Last change: 11 Dec 2008 11
libcurl Manual curleasysetopt(3)
CURLOPTPROXY
Set HTP proxy to use. The parameter should be a char *
to a zero terminated string holding the host name or
dotted IP address. To specify port number in this
string, append :[port] to the end of the host name. The
proxy string may be prefixed with [protocol]:/ since
any such prefix will be ignored. The proxy's port
number may optionally be specified with the separate
option. If not specified, libcurl will default to using
port 1080 for proxies. CURLOPTPROXYPORT.
When you tell the library to use an HTP proxy, libcurl
will transparently convert operations to HTP even if
you specify an FTP URL etc. This may have an impact on
what other features of the library you can use, such as
CURLOPTQUOTE and similar FTP specifics that don't work
unless you tunnel through the HTP proxy. Such tunnel-
ing is activated with CURLOPTHTPROXYTUNEL.
libcurl respects the environment variables httpproxy,
ftpproxy, allproxy etc, if any of those are set. The
CURLOPTPROXY option does however override any possibly
set environment variables.
Setting the proxy string to "" (an empty string) will
explicitly disable the use of a proxy, even if there is
an environment variable set for it.
Since 7.14.1, the proxy host string given in environ-
ment variables can be specified the exact same way as
the proxy can be set with CURLOPTPROXY, include proto-
col prefix (http:/) and embedded user ] password.
CURLOPTPROXYPORT
Pass a long with this option to set the proxy port to
connect to unless it is specified in the proxy string
CURLOPTPROXY.
CURLOPTPROXYTYPE
Pass a long with this option to set type of the proxy.
Available options for this are CURLPROXYHTP,
CURLPROXYHTP10 (added in 7.19.4), CURLPROXYSOCKS4
(added in 7.15.2), CURLPROXYSOCKS5, CURLPROXYSOCKS4A
(added in 7.18.0) and CURLPROXYSOCKS5HOSTNAME (added
in 7.18.0). The HTP type is default. (Added in 7.10)
CURLOPTNOPROXY
Pass a pointer to a zero terminated string. The should
be a comma- separated list of hosts which do not use a
proxy, if one is specified. The only wildcard is a
single * character, which matches all hosts, and effec-
tively disables the proxy. Each name in this list is
libcurl 7.19.3 Last change: 11 Dec 2008 12
libcurl Manual curleasysetopt(3)
matched as either a domain which contains the hostname,
or the hostname itself. For example, local.com would
match local.com, local.com:80, and www.local.com, but
not www.notlocal.com. (Added in 7.19.4)
CURLOPTHTPROXYTUNEL
Set the parameter to 1 to make the library tunnel all
operations through a given HTP proxy. There is a big
difference between using a proxy and to tunnel through
it. If you don't know what this means, you probably
don't want this tunneling option.
CURLOPTSOCKS5GSAPISERVICE
Pass a char * as parameter to a string holding the name
of the service. The default service name for a SOCKS5
server is rcmd/server-fqdn. This option allows you to
change it. (Added in 7.19.4)
CURLOPTSOCKS5GSAPINEC
Pass a long set to 1 to enable or 0 to disable. As part
of the gssapi negotiation a protection mode is nego-
tiated. The rfc1961 says in section 4.3/4.4 it should
be protected, but the NEC reference implementation does
not. If enabled, this option allows the unprotected
exchange of the protection mode negotiation. (Added in
7.19.4).
CURLOPTINTERFACE
Pass a char * as parameter. This sets the interface
name to use as outgoing network interface. The name can
be an interface name, an IP address, or a host name.
CURLOPTLOCALPORT
Pass a long. This sets the local port number of the
socket used for connection. This can be used in combi-
nation with CURLOPTINTERFACE and you are recommended
to use CURLOPTLOCALPORTRANGE as well when this is set.
Note that the only valid port numbers are 1 - 65535.
(Added in 7.15.2)
CURLOPTLOCALPORTRANGE
Pass a long. This is the number of attempts libcurl
should make to find a working local port number. It
starts with the given CURLOPTLOCALPORT and adds one to
the number for each retry. Setting this to 1 or below
will make libcurl do only one try for the exact port
number. Note that port numbers by nature are scarce
resources that will be busy at times so setting this
value to something too low might cause unnecessary con-
nection setup failures. (Added in 7.15.2)
CURLOPTDNSCACHETIMEOUT
libcurl 7.19.3 Last change: 11 Dec 2008 13
libcurl Manual curleasysetopt(3)
Pass a long, this sets the timeout in seconds. Name
resolves will be kept in memory for this number of
seconds. Set to zero to completely disable caching, or
set to -1 to make the cached entries remain forever. By
default, libcurl caches this info for 60 seconds.
NOTE: the name resolve functions of various libc imple-
mentations don't re-read name server information unless
explicitly told so (for example, by calling
resinit(3)). This may cause libcurl to keep using the
older server even if DHCP has updated the server info,
and this may look like a DNS cache issue to the casual
libcurl-app user.
CURLOPTDNSUSEGLOBALCACHE
Pass a long. If the value is 1, it tells curl to use a
global DNS cache that will survive between easy handle
creations and deletions. This is not thread-safe and
this will use a global variable.
WARNING: this option is considered obsolete. Stop using
it. Switch over to using the share interface instead!
See CURLOPTSHARE and curlshareinit(3).
CURLOPTBUFERSIZE
Pass a long specifying your preferred size (in bytes)
for the receive buffer in libcurl. The main point of
this would be that the write callback gets called more
often and with smaller chunks. This is just treated as
a request, not an order. You cannot be guaranteed to
actually get the given size. (Added in 7.10)
This size is by default set as big as possible
(CURLMAXWRITESIZE), so it only makes sense to use
this option if you want it smaller.
CURLOPTPORT
Pass a long specifying what remote port number to con-
nect to, instead of the one specified in the URL or the
default port for the used protocol.
CURLOPTCPNODELAY
Pass a long specifying whether the TCPNODELAY option
should be set or cleared (1 = set, 0 = clear). The
option is cleared by default. This will have no effect
after the connection has been established.
Setting this option will disable TCP's Nagle algorithm.
The purpose of this algorithm is to try to minimize the
number of small packets on the network (where "small
packets" means TCP segments less than the Maximum Seg-
ment Size (MS) for the network).
libcurl 7.19.3 Last change: 11 Dec 2008 14
libcurl Manual curleasysetopt(3)
Maximizing the amount of data sent per TCP segment is
good because it amortizes the overhead of the send.
However, in some cases (most notably telnet or rlogin)
small segments may need to be sent without delay. This
is less efficient than sending larger amounts of data
at a time, and can contribute to congestion on the net-
work if overdone.
CURLOPTADRESCOPE
Pass a long specifying the scopeid value to use when
connecting to IPv6 link-local or site-local addresses.
(Added in 7.19.0)
NAMES and PASWORDS OPTIONS (Authentication)
CURLOPTNETRC
This parameter controls the preference of libcurl
between using user names and passwords from your
~/.netrc file, relative to user names and passwords in
the URL supplied with CURLOPTURL.
libcurl uses a user name (and supplied or prompted
password) supplied with CURLOPTUSERPWD in preference
to any of the options controlled by this parameter.
Pass a long, set to one of the values described below.
CURLNETRCOPTIONAL
The use of your ~/.netrc file is optional, and
information in the URL is to be preferred. The
file will be scanned for the host and user name
(to find the password only) or for the host only,
to find the first user name and password after
that machine, which ever information is not speci-
fied in the URL.
Undefined values of the option will have this
effect.
CURLNETRCIGNORED
The library will ignore the file and use only the
information in the URL.
This is the default.
CURLNETRCREQUIRED
This value tells the library that use of the file
is required, to ignore the information in the URL,
and to search the file for the host only.
Only machine name, user name and password are taken into
account (init macros and similar things aren't supported).
libcurl does not verify that the file has the correct
libcurl 7.19.3 Last change: 11 Dec 2008 15
libcurl Manual curleasysetopt(3)
properties set (as the standard Unix ftp client does). It
should only be readable by user.
CURLOPTNETRCFILE
Pass a char * as parameter, pointing to a zero ter-
minated string containing the full path name to the
file you want libcurl to use as .netrc file. If this
option is omitted, and CURLOPTNETRC is set, libcurl
will attempt to find a .netrc file in the current
user's home directory. (Added in 7.10.9)
CURLOPTUSERPWD
Pass a char * as parameter, which should be [user
name]:[password] to use for the connection. Use
CURLOPTHTPAUTH to decide the authentication method.
When using NTLM, you can set the domain by prepending
it to the user name and separating the domain and name
with a forward (/) or backward slash (\). Like this:
"domain/user:password" or "domain\user:password". Some
HTP servers (on Windows) support this style even for
Basic authentication.
When using HTP and CURLOPTFOLOWLOCATION, libcurl
might perform several requests to possibly different
hosts. libcurl will only send this user and password
information to hosts using the initial host name
(unless CURLOPTUNRESTRICTEDAUTH is set), so if lib-
curl follows locations to other hosts it will not send
the user and password to those. This is enforced to
prevent accidental information leakage.
CURLOPTPROXYUSERPWD
Pass a char * as parameter, which should be [user
name]:[password] to use for the connection to the HTP
proxy. Use CURLOPTPROXYAUTH to decide the authentica-
tion method.
CURLOPTUSERNAME
Pass a char * as parameter, which should be pointing to
the zero terminated user name to use for the transfer.
CURLOPTUSERNAME sets the user name to be used in pro-
tocol authentication. You should not use this option
together with the (older) CURLOPTUSERPWD option.
In order to specify the password to be used in conjunc-
tion with the user name use the CURLOPTPASWORD
option. (Added in 7.19.1)
CURLOPTPASWORD
Pass a char * as parameter, which should be pointing to
libcurl 7.19.3 Last change: 11 Dec 2008 16
libcurl Manual curleasysetopt(3)
the zero terminated password to use for the transfer.
The CURLOPTPASWORD option should be used in conjunc-
tion with the CURLOPTUSERNAME option. (Added in
7.19.1)
CURLOPTPROXYUSERNAME
Pass a char * as parameter, which should be pointing to
the zero terminated user name to use for the transfer
while connecting to Proxy.
The CURLOPTPROXYUSERNAME option should be used in same
way as the CURLOPTPROXYUSERPWD is used. In comparison
to CURLOPTPROXYUSERPWD the CURLOPTPROXYUSERNAME
allows the username to contain a colon, like in the
following example: "sip:user@example.com". Note the
CURLOPTPROXYUSERNAME option is an alternative way to
set the user name while connecting to Proxy. There is
no meaning to use it together with the
CURLOPTPROXYUSERPWD option.
In order to specify the password to be used in conjunc-
tion with the user name use the CURLOPTPROXYPASWORD
option. (Added in 7.19.1)
CURLOPTPROXYPASWORD
Pass a char * as parameter, which should be pointing to
the zero terminated password to use for the transfer
while connecting to Proxy.
The CURLOPTPROXYPASWORD option should be used in con-
junction with the CURLOPTPROXYUSERNAME option. (Added
in 7.19.1)
CURLOPTHTPAUTH
Pass a long as parameter, which is set to a bitmask, to
tell libcurl which authentication method(s) you want it
to use. The available bits are listed below. If more
than one bit is set, libcurl will first query the site
to see which authentication methods it supports and
then pick the best one you allow it to use. For some
methods, this will induce an extra network round-trip.
Set the actual name and password with the
CURLOPTUSERPWD option or with the CURLOPTUSERNAME and
the CURLOPTUSERPASWORD options. (Added in 7.10.6)
CURLAUTHBASIC
HTP Basic authentication. This is the default
choice, and the only method that is in wide-spread
use and supported virtually everywhere. This sends
the user name and password over the network in
plain text, easily captured by others.
libcurl 7.19.3 Last change: 11 Dec 2008 17
libcurl Manual curleasysetopt(3)
CURLAUTHDIGEST
HTP Digest authentication. Digest authentication
is defined in RFC2617 and is a more secure way to
do authentication over public networks than the
regular old-fashioned Basic method.
CURLAUTHDIGESTIE
HTP Digest authentication with an IE flavor.
Digest authentication is defined in RFC2617 and is
a more secure way to do authentication over public
networks than the regular old-fashioned Basic
method. The IE flavor is simply that libcurl will
use a special "quirk" that IE is known to have
used before version 7 and that some servers
require the client to use. (This define was added
in 7.19.3)
CURLAUTHGSNEGOTIATE
HTP GS-Negotiate authentication. The GS-
Negotiate (also known as plain "Negotiate") method
was designed by Microsoft and is used in their web
applications. It is primarily meant as a support
for Kerberos5 authentication but may also be used
along with other authentication methods. For more
information see IETF draft draft-brezak-spnego-
http-04.txt.
You need to build libcurl with a suitable GS-API
library for this to work.
CURLAUTHNTLM
HTP NTLM authentication. A proprietary protocol
invented and used by Microsoft. It uses a
challenge-response and hash concept similar to
Digest, to prevent the password from being eaves-
dropped.
You need to build libcurl with OpenSL support for
this option to work, or build libcurl on Windows.
CURLAUTHANY
This is a convenience macro that sets all bits and
thus makes libcurl pick any it finds suitable.
libcurl will automatically select the one it finds
most secure.
CURLAUTHANYSAFE
This is a convenience macro that sets all bits
except Basic and thus makes libcurl pick any it
finds suitable. libcurl will automatically select
the one it finds most secure.
libcurl 7.19.3 Last change: 11 Dec 2008 18
libcurl Manual curleasysetopt(3)
CURLOPTPROXYAUTH
Pass a long as parameter, which is set to a bitmask, to
tell libcurl which authentication method(s) you want it
to use for your proxy authentication. If more than one
bit is set, libcurl will first query the site to see
what authentication methods it supports and then pick
the best one you allow it to use. For some methods,
this will induce an extra network round-trip. Set the
actual name and password with the CURLOPTPROXYUSERPWD
option. The bitmask can be constructed by or'ing
together the bits listed above for the CURLOPTHTPAUTH
option. As of this writing, only Basic, Digest and NTLM
work. (Added in 7.10.7)
HTP OPTIONS
CURLOPTAUTOREFERER
Pass a parameter set to 1 to enable this. When enabled,
libcurl will automatically set the Referer: field in
requests where it follows a Location: redirect.
CURLOPTENCODING
Sets the contents of the Accept-Encoding: header sent
in an HTP request, and enables decoding of a response
when a Content-Encoding: header is received. Three
encodings are supported: identity, which does nothing,
deflate which requests the server to compress its
response using the zlib algorithm, and gzip which
requests the gzip algorithm. If a zero-length string
is set, then an Accept-Encoding: header containing all
supported encodings is sent.
This is a request, not an order; the server may or may
not do it. This option must be set (to any non-NUL
value) or else any unsolicited encoding done by the
server is ignored. See the special file
lib/README.encoding for details.
CURLOPTFOLOWLOCATION
A parameter set to 1 tells the library to follow any
Location: header that the server sends as part of an
HTP header.
This means that the library will re-send the same
request on the new location and follow new Location:
headers all the way until no more such headers are
returned. CURLOPTMAXREDIRS can be used to limit the
number of redirects libcurl will follow.
NOTE: since 7.19.4, libcurl can limit to what protocols
it will automatically follow. The accepted protocols
are set with CURLOPTREDIRPROTOCOLS and it excludes
the FILE protocol by default.
libcurl 7.19.3 Last change: 11 Dec 2008 19
libcurl Manual curleasysetopt(3)
CURLOPTUNRESTRICTEDAUTH
A parameter set to 1 tells the library it can continue
to send authentication (user]password) when following
locations, even when hostname changed. This option is
meaningful only when setting CURLOPTFOLOWLOCATION.
CURLOPTMAXREDIRS
Pass a long. The set number will be the redirection
limit. If that many redirections have been followed,
the next redirect will cause an error
(CURLETOMANYREDIRECTS). This option only makes
sense if the CURLOPTFOLOWLOCATION is used at the same
time. Added in 7.15.1: Setting the limit to 0 will
make libcurl refuse any redirect. Set it to -1 for an
infinite number of redirects (which is the default)
CURLOPTPOSTREDIR
Pass a bitmask to control how libcurl acts on redirects
after POSTs that get a 301 or 302 response back. A
parameter with bit 0 set (value CURLREDIRPOST301)
tells the library to respect RFC 2616/10.3.2 and not
convert POST requests into GET requests when following
a 301 redirection. Setting bit 1 (value
CURLREDIRPOST302) makes libcurl maintain the request
method after a 302 redirect. CURLREDIRPOSTAL is a
convenience define that sets both bits.
The non-RFC behaviour is ubiquitous in web browsers, so
the library does the conversion by default to maintain
consistency. However, a server may require a POST to
remain a POST after such a redirection. This option is
meaningful only when setting CURLOPTFOLOWLOCATION.
(Added in 7.17.1) (This option was known as
CURLOPTPOST301 up to 7.19.0 as it only supported the
301 way before then)
CURLOPTPUT
A parameter set to 1 tells the library to use HTP PUT
to transfer data. The data should be set with
CURLOPTREADATA and CURLOPTINFILESIZE.
This option is deprecated and starting with version
7.12.1 you should instead use CURLOPTUPLOAD.
CURLOPTPOST
A parameter set to 1 tells the library to do a regular
HTP post. This will also make the library use a
"Content-Type: application/x-www-form-urlencoded"
header. (This is by far the most commonly used POST
method).
Use one of CURLOPTPOSTFIELDS or CURLOPTCOPYPOSTFIELDS
libcurl 7.19.3 Last change: 11 Dec 2008 20
libcurl Manual curleasysetopt(3)
options to specify what data to post and
CURLOPTPOSTFIELDSIZE or CURLOPTPOSTFIELDSIZELARGE to
set the data size.
Optionally, you can provide data to POST using the
CURLOPTREADFUNCTION and CURLOPTREADATA options but
then you must make sure to not set CURLOPTPOSTFIELDS
to anything but NUL. When providing data with a call-
back, you must transmit it using chunked transfer-
encoding or you must set the size of the data with the
CURLOPTPOSTFIELDSIZE or CURLOPTPOSTFIELDSIZELARGE
option. To enable chunked encoding, you simply pass in
the appropriate Transfer-Encoding header, see the
post-callback.c example.
You can override the default POST Content-Type: header
by setting your own with CURLOPTHTPHEADER.
Using POST with HTP 1.1 implies the use of a "Expect:
100-continue" header. You can disable this header with
CURLOPTHTPHEADER as usual.
If you use POST to a HTP 1.1 server, you can send data
without knowing the size before starting the POST if
you use chunked encoding. You enable this by adding a
header like "Transfer-Encoding: chunked" with
CURLOPTHTPHEADER. With HTP 1.0 or without chunked
transfer, you must specify the size in the request.
When setting CURLOPTPOST to 1, it will automatically
set CURLOPTNOBODY to 0 (since 7.14.1).
If you issue a POST request and then want to make a
HEAD or GET using the same re-used handle, you must
explicitly set the new request type using
CURLOPTNOBODY or CURLOPTHTPGET or similar.
CURLOPTPOSTFIELDS
Pass a void * as parameter, which should be the full
data to post in an HTP POST operation. You must make
sure that the data is formatted the way you want the
server to receive it. libcurl will not convert or
encode it for you. Most web servers will assume this
data to be url-encoded. Take note.
The pointed data are NOT copied by the library: as a
consequence, they must be preserved by the calling
application until the transfer finishes.
This POST is a normal application/x-www-form-urlencoded
kind (and libcurl will set that Content-Type by default
when this option is used), which is the most commonly
libcurl 7.19.3 Last change: 11 Dec 2008 21
libcurl Manual curleasysetopt(3)
used one by HTML forms. See also the CURLOPTPOST.
Using CURLOPTPOSTFIELDS implies CURLOPTPOST.
If you want to do a zero-byte POST, you need to set
CURLOPTPOSTFIELDSIZE explicitly to zero, as simply
setting CURLOPTPOSTFIELDS to NUL or "" just effec-
tively disables the sending of the specified string.
libcurl will instead assume that you'll send the POST
data using the read callback!
Using POST with HTP 1.1 implies the use of a "Expect:
100-continue" header. You can disable this header with
CURLOPTHTPHEADER as usual.
To make multipart/formdata posts (aka rfc1867-posts),
check out the CURLOPTHTPOST option.
CURLOPTPOSTFIELDSIZE
If you want to post data to the server without letting
libcurl do a strlen() to measure the data size, this
option must be used. When this option is used you can
post fully binary data, which otherwise is likely to
fail. If this size is set to -1, the library will use
strlen() to get the size.
CURLOPTPOSTFIELDSIZELARGE
Pass a curlofft as parameter. Use this to set the
size of the CURLOPTPOSTFIELDS data to prevent libcurl
from doing strlen() on the data to figure out the size.
This is the large file version of the
CURLOPTPOSTFIELDSIZE option. (Added in 7.11.1)
CURLOPTCOPYPOSTFIELDS
Pass a char * as parameter, which should be the full
data to post in an HTP POST operation. It behaves as
the CURLOPTPOSTFIELDS option, but the original data
are copied by the library, allowing the application to
overwrite the original data after setting this option.
Because data are copied, care must be taken when using
this option in conjunction with CURLOPTPOSTFIELDSIZE
or CURLOPTPOSTFIELDSIZELARGE: If the size has not
been set prior to CURLOPTCOPYPOSTFIELDS, the data are
assumed to be a NUL-terminated string; else the stored
size informs the library about the data byte count to
copy. In any case, the size must not be changed after
CURLOPTCOPYPOSTFIELDS, unless another
CURLOPTPOSTFIELDS or CURLOPTCOPYPOSTFIELDS option is
issued. (Added in 7.17.1)
CURLOPTHTPOST
Tells libcurl you want a multipart/formdata HTP POST
libcurl 7.19.3 Last change: 11 Dec 2008 22
libcurl Manual curleasysetopt(3)
to be made and you instruct what data to pass on to the
server. Pass a pointer to a linked list of
curlhttppost structs as parameter. The easiest way to
create such a list, is to use curlformadd(3) as docu-
mented. The data in this list must remain intact until
you close this curl handle again with
curleasycleanup(3).
Using POST with HTP 1.1 implies the use of a "Expect:
100-continue" header. You can disable this header with
CURLOPTHTPHEADER as usual.
When setting CURLOPTHTPOST, it will automatically
set CURLOPTNOBODY to 0 (since 7.14.1).
CURLOPTREFERER
Pass a pointer to a zero terminated string as parame-
ter. It will be used to set the Referer: header in the
http request sent to the remote server. This can be
used to fool servers or scripts. You can also set any
custom header with CURLOPTHTPHEADER.
CURLOPTUSERAGENT
Pass a pointer to a zero terminated string as parame-
ter. It will be used to set the User-Agent: header in
the http request sent to the remote server. This can be
used to fool servers or scripts. You can also set any
custom header with CURLOPTHTPHEADER.
CURLOPTHTPHEADER
Pass a pointer to a linked list of HTP headers to pass
to the server in your HTP request. The linked list
should be a fully valid list of struct curlslist
structs properly filled in. Use curlslistappend(3) to
create the list and curlslistfreeall(3) to clean up
an entire list. If you add a header that is otherwise
generated and used by libcurl internally, your added
one will be used instead. If you add a header with no
content as in 'Accept:' (no data on the right side of
the colon), the internally used header will get dis-
abled. Thus, using this option you can add new headers,
replace internal headers and remove internal headers.
To add a header with no content, make the content be
two quotes: "". The headers included in the linked list
must not be CRLF-terminated, because curl adds CRLF
after each header item. Failure to comply with this
will result in strange bugs because the server will
most likely ignore part of the headers you specified.
The first line in a request (containing the method,
usually a GET or POST) is not a header and cannot be
replaced using this option. Only the lines following
libcurl 7.19.3 Last change: 11 Dec 2008 23
libcurl Manual curleasysetopt(3)
the request-line are headers. Adding this method line
in this list of headers will only cause your request to
send an invalid header.
Pass a NUL to this to reset back to no custom headers.
The most commonly replaced headers have "shortcuts" in
the options CURLOPTCOKIE, CURLOPTUSERAGENT and
CURLOPTREFERER.
CURLOPTHTP200ALIASES
Pass a pointer to a linked list of aliases to be
treated as valid HTP 200 responses. Some servers
respond with a custom header response line. For exam-
ple, IceCast servers respond with "ICY 200 OK". By
including this string in your list of aliases, the
response will be treated as a valid HTP header line
such as "HTP/1.0 200 OK". (Added in 7.10.3)
The linked list should be a fully valid list of struct
curlslist structs, and be properly filled in. Use
curlslistappend(3) to create the list and
curlslistfreeall(3) to clean up an entire list.
The alias itself is not parsed for any version strings.
Before libcurl 7.16.3, Libcurl used the value set by
option CURLOPTHTPVERSION, but starting with 7.16.3
the protocol is assumed to match HTP 1.0 when an alias
matched.
CURLOPTCOKIE
Pass a pointer to a zero terminated string as parame-
ter. It will be used to set a cookie in the http
request. The format of the string should be
NAME=CONTENTS, where NAME is the cookie name and CON-
TENTS is what the cookie should contain.
If you need to set multiple cookies, you need to set
them all using a single option and thus you need to
concatenate them all in one single string. Set multiple
cookies in one string like this: "name1=content1;
name2=content2;" etc.
Note that this option sets the cookie header explictly
in the outgoing request(s). If multiple requests are
done due to authentication, followed redirections or
similar, they will all get this cookie passed on.
Using this option multiple times will only make the
latest string override the previous ones.
CURLOPTCOKIEFILE
libcurl 7.19.3 Last change: 11 Dec 2008 24
libcurl Manual curleasysetopt(3)
Pass a pointer to a zero terminated string as parame-
ter. It should contain the name of your file holding
cookie data to read. The cookie data may be in Netscape
/ Mozilla cookie data format or just regular HTP-style
headers dumped to a file.
Given an empty or non-existing file or by passing the
empty string (""), this option will enable cookies for
this curl handle, making it understand and parse
received cookies and then use matching cookies in
future requests.
If you use this option multiple times, you just add
more files to read. Subsequent files will add more
cookies.
CURLOPTCOKIEJAR
Pass a file name as char *, zero terminated. This will
make libcurl write all internally known cookies to the
specified file when curleasycleanup(3) is called. If
no cookies are known, no file will be created. Specify
"-" to instead have the cookies written to stdout.
Using this option also enables cookies for this ses-
sion, so if you for example follow a location it will
make matching cookies get sent accordingly.
If the cookie jar file can't be created or written to
(when the curleasycleanup(3) is called), libcurl will
not and cannot report an error for this. Using
CURLOPTVERBOSE or CURLOPTDEBUGFUNCTION will get a
warning to display, but that is the only visible feed-
back you get about this possibly lethal situation.
CURLOPTCOKIESESION
Pass a long set to 1 to mark this as a new cookie "ses-
sion". It will force libcurl to ignore all cookies it
is about to load that are "session cookies" from the
previous session. By default, libcurl always stores and
loads all cookies, independent if they are session
cookies or not. Session cookies are cookies without
expiry date and they are meant to be alive and existing
for this "session" only.
CURLOPTCOKIELIST
Pass a char * to a cookie string. Cookie can be either
in Netscape / Mozilla format or just regular HTP-style
header (Set-Cookie: ...) format. If cURL cookie engine
was not enabled it will enable its cookie engine.
Passing a magic string "AL" will erase all cookies
known by cURL. (Added in 7.14.1) Passing the special
string "SES" will only erase all session cookies known
by cURL. (Added in 7.15.4) Passing the special string
libcurl 7.19.3 Last change: 11 Dec 2008 25
libcurl Manual curleasysetopt(3)
"FLUSH" will write all cookies known by cURL to the
file specified by CURLOPTCOKIEJAR. (Added in 7.17.1)
CURLOPTHTPGET
Pass a long. If the long is 1, this forces the HTP
request to get back to GET. Usable if a POST, HEAD,
PUT, or a custom request has been used previously using
the same curl handle.
When setting CURLOPTHTPGET to 1, it will automati-
cally set CURLOPTNOBODY to 0 (since 7.14.1).
CURLOPTHTPVERSION
Pass a long, set to one of the values described below.
They force libcurl to use the specific HTP versions.
This is not sensible to do unless you have a good rea-
son.
CURLHTPVERSIONONE
We don't care about what version the library uses.
libcurl will use whatever it thinks fit.
CURLHTPVERSION10
Enforce HTP 1.0 requests.
CURLHTPVERSION11
Enforce HTP 1.1 requests.
CURLOPTIGNORECONTENTLENGTH
Ignore the Content-Length header. This is useful for
Apache 1.x (and similar servers) which will report
incorrect content length for files over 2 gigabytes. If
this option is used, curl will not be able to accu-
rately report progress, and will simply stop the down-
load when the server ends the connection. (added in
7.14.1)
CURLOPTHTPCONTENTDECODING
Pass a long to tell libcurl how to act on content
decoding. If set to zero, content decoding will be dis-
abled. If set to 1 it is enabled. Note however that
libcurl has no default content decoding but requires
you to use CURLOPTENCODING for that. (added in 7.16.2)
CURLOPTHTPTRANSFERDECODING
Pass a long to tell libcurl how to act on transfer
decoding. If set to zero, transfer decoding will be
disabled, if set to 1 it is enabled (default). libcurl
does chunked transfer decoding by default unless this
option is set to zero. (added in 7.16.2)
libcurl 7.19.3 Last change: 11 Dec 2008 26
libcurl Manual curleasysetopt(3)
TFTP OPTIONS
CURLOPTFTPBLKSIZE
Specify block size to use for TFTP data transmission.
Valid range as per RFC 2348 is 8-65464 bytes. The
default of 512 bytes will be used if this option is not
specified. The specified block size will only be used
pending support by the remote server. If the server
does not return an option acknowledgement or returns an
option acknowledgement with no blksize, the default of
512 bytes will be used. (added in 7.19.4)
FTP OPTIONS
CURLOPTFTPORT
Pass a pointer to a zero terminated string as parame-
ter. It will be used to get the IP address to use for
the FTP PORT instruction. The PORT instruction tells
the remote server to connect to our specified IP
address. The string may be a plain IP address, a host
name, a network interface name (under Unix) or just a
'-' symbol to let the library use your system's default
IP address. Default FTP operations are passive, and
thus won't use PORT.
You disable PORT again and go back to using the passive
version by setting this option to NUL.
CURLOPTQUOTE
Pass a pointer to a linked list of FTP or SFTP commands
to pass to the server prior to your FTP request. This
will be done before any other commands are issued (even
before the CWD command for FTP). The linked list should
be a fully valid list of 'struct curlslist' structs
properly filled in with text strings. Use
curlslistappend(3) to append strings (commands) to
the list, and clear the entire list afterwards with
curlslistfreeall(3). Disable this operation again by
setting a NUL to this option. The set of valid FTP
commands depends on the server (see RFC959 for a list
of mandatory commands). The valid SFTP commands are:
chgrp, chmod, chown, ln, mkdir, pwd, rename, rm, rmdir,
symlink (see curl(1)) (SFTP support added in 7.16.3)
CURLOPTPOSTQUOTE
Pass a pointer to a linked list of FTP or SFTP commands
to pass to the server after your FTP transfer request.
The linked list should be a fully valid list of struct
curlslist structs properly filled in as described for
CURLOPTQUOTE. Disable this operation again by setting
a NUL to this option.
CURLOPTPREQUOTE
Pass a pointer to a linked list of FTP commands to pass
libcurl 7.19.3 Last change: 11 Dec 2008 27
libcurl Manual curleasysetopt(3)
to the server after the transfer type is set. The
linked list should be a fully valid list of struct
curlslist structs properly filled in as described for
CURLOPTQUOTE. Disable this operation again by setting
a NUL to this option. Before version 7.15.6, if you
also set CURLOPTNOBODY to 1, this option didn't work.
CURLOPTDIRLISTONLY
A parameter set to 1 tells the library to just list the
names of files in a directory, instead of doing a full
directory listing that would include file sizes, dates
etc. This works for FTP and SFTP URLs.
This causes an FTP NLST command to be sent on an FTP
server. Beware that some FTP servers list only files
in their response to NLST; they might not include sub-
directories and symbolic links.
(This option was known as CURLOPTFTPLISTONLY up to
7.16.4)
CURLOPTAPEND
A parameter set to 1 tells the library to append to the
remote file instead of overwrite it. This is only use-
ful when uploading to an FTP site.
(This option was known as CURLOPTFTPAPEND up to
7.16.4)
CURLOPTFTPUSEPRT
Pass a long. If the value is 1, it tells curl to use
the EPRT (and LPRT) command when doing active FTP down-
loads (which is enabled by CURLOPTFTPORT). Using EPRT
means that it will first attempt to use EPRT and then
LPRT before using PORT, but if you pass zero to this
option, it will not try using EPRT or LPRT, only plain
PORT. (Added in 7.10.5)
If the server is an IPv6 host, this option will have no
effect as of 7.12.3.
CURLOPTFTPUSEPSV
Pass a long. If the value is 1, it tells curl to use
the EPSV command when doing passive FTP downloads
(which it always does by default). Using EPSV means
that it will first attempt to use EPSV before using
PASV, but if you pass zero to this option, it will not
try using EPSV, only plain PASV.
If the server is an IPv6 host, this option will have no
effect as of 7.12.3.
libcurl 7.19.3 Last change: 11 Dec 2008 28
libcurl Manual curleasysetopt(3)
CURLOPTFTPCREATEMISINGDIRS
Pass a long. If the value is 1, curl will attempt to
create any remote directory that it fails to CWD into.
CWD is the command that changes working directory.
(Added in 7.10.7)
This setting also applies to SFTP-connections. curl
will attempt to create the remote directory if it can't
obtain a handle to the target-location. The creation
will fail if a file of the same name as the directory
to create already exists or lack of permissions
prevents creation. (Added in 7.16.3)
Starting with 7.19.4, you can also set this value to 2,
which will make libcurl retry the CWD command again if
the subsequent MKD command fails. This is especially
useful if you're doing many simultanoes connections
against the same server and they all have this option
enabled, as then CWD may first fail but then another
connection does MKD before this connection and thus MKD
fails but trying CWD works! 7.19.4 also introduced the
CURLFTPCREATEDIR and CURLFTPCREATEDIRETRY enum
names for these arguments.
Before version 7.19.4, libcurl will simply ignore argu-
ments set to 2 and act as if 1 was selected.
CURLOPTFTPRESPONSETIMEOUT
Pass a long. Causes curl to set a timeout period (in
seconds) on the amount of time that the server is
allowed to take in order to generate a response message
for a command before the session is considered hung.
While curl is waiting for a response, this value over-
rides CURLOPTIMEOUT. It is recommended that if used
in conjunction with CURLOPTIMEOUT, you set
CURLOPTFTPRESPONSETIMEOUT to a value smaller than
CURLOPTIMEOUT. (Added in 7.10.8)
CURLOPTFTPALTERNATIVETOUSER
Pass a char * as parameter, pointing to a string which
will be used to authenticate if the usual FTP "USER
user" and "PAS password" negotiation fails. This is
currently only known to be required when connecting to
Tumbleweed's Secure Transport FTPS server using client
certificates for authentication. (Added in 7.15.5)
CURLOPTFTPSKIPASVIP
Pass a long. If set to 1, it instructs libcurl to not
use the IP address the server suggests in its 227-
response to libcurl's PASV command when libcurl con-
nects the data connection. Instead libcurl will re-use
the same IP address it already uses for the control
libcurl 7.19.3 Last change: 11 Dec 2008 29
libcurl Manual curleasysetopt(3)
connection. But it will use the port number from the
227-response. (Added in 7.14.2)
This option has no effect if PORT, EPRT or EPSV is used
instead of PASV.
CURLOPTUSESL
Pass a long using one of the values from below, to make
libcurl use your desired level of SL for the FTP
transfer. (Added in 7.11.0)
(This option was known as CURLOPTFTPSL up to 7.16.4,
and the constants were known as CURLFTPSL*)
CURLUSESLNONE
Don't attempt to use SL.
CURLUSESLTRY
Try using SL, proceed as normal otherwise.
CURLUSESLCONTROL
Require SL for the control connection or fail
with CURLEUSESLFAILED.
CURLUSESLAL
Require SL for all communication or fail with
CURLEUSESLFAILED.
CURLOPTFTPSLAUTH
Pass a long using one of the values from below, to
alter how libcurl issues "AUTH TLS" or "AUTH SL" when
FTP over SL is activated (see CURLOPTUSESL). (Added
in 7.12.2)
CURLFTPAUTHDEFAULT
Allow libcurl to decide.
CURLFTPAUTHSL
Try "AUTH SL" first, and only if that fails try
"AUTH TLS".
CURLFTPAUTHTLS
Try "AUTH TLS" first, and only if that fails try
"AUTH SL".
CURLOPTFTPSLC
If enabled, this option makes libcurl use C (Clear
Command Channel). It shuts down the SL/TLS layer after
authenticating. The rest of the control channel commun-
ication will be unencrypted. This allows NAT routers to
follow the FTP transaction. Pass a long using one of
the values below. (Added in 7.16.1)
libcurl 7.19.3 Last change: 11 Dec 2008 30
libcurl Manual curleasysetopt(3)
CURLFTPSLCNONE
Don't attempt to use C.
CURLFTPSLCPASIVE
Do not initiate the shutdown, but wait for the
server to do it. Do not send a reply.
CURLFTPSLCACTIVE
Initiate the shutdown and wait for a reply.
CURLOPTFTPACOUNT
Pass a pointer to a zero-terminated string (or NUL to
disable). When an FTP server asks for "account data"
after user name and password has been provided, this
data is sent off using the ACT command. (Added in
7.13.0)
CURLOPTFTPFILEMETHOD
Pass a long that should have one of the following
values. This option controls what method libcurl should
use to reach a file on a FTP(S) server. The argument
should be one of the following alternatives:
CURLFTPMETHODMULTICWD
libcurl does a single CWD operation for each path
part in the given URL. For deep hierarchies this
means many commands. This is how RFC1738 says it
should be done. This is the default but the
slowest behavior.
CURLFTPMETHODNOCWD
libcurl does no CWD at all. libcurl will do SIZE,
RETR, STOR etc and give a full path to the server
for all these commands. This is the fastest
behavior.
CURLFTPMETHODSINGLECWD
libcurl does one CWD with the full target direc-
tory and then operates on the file "normally"
(like in the multicwd case). This is somewhat more
standards compliant than 'nocwd' but without the
full penalty of 'multicwd'.
(Added in 7.15.1)
PROTOCOL OPTIONS
CURLOPTRANSFERTEXT
A parameter set to 1 tells the library to use ASCI
mode for FTP transfers, instead of the default binary
transfer. For win32 systems it does not set the stdout
to binary mode. This option can be usable when
transferring text data between systems with different
views on certain characters, such as newlines or
libcurl 7.19.3 Last change: 11 Dec 2008 31
libcurl Manual curleasysetopt(3)
similar.
libcurl does not do a complete ASCI conversion when
doing ASCI transfers over FTP. This is a known
limitation/flaw that nobody has rectified. libcurl sim-
ply sets the mode to ASCI and performs a standard
transfer.
CURLOPTPROXYTRANSFERMODE
Pass a long. If the value is set to 1 (one), it tells
libcurl to set the transfer mode (binary or ASCI) for
FTP transfers done via an HTP proxy, by appending
;type=a or ;type=i to the URL. Without this setting, or
it being set to 0 (zero, the default),
CURLOPTRANSFERTEXT has no effect when doing FTP via a
proxy. Beware that not all proxies support this
feature. (Added in 7.18.0)
CURLOPTCRLF
Convert Unix newlines to CRLF newlines on transfers.
CURLOPTRANGE
Pass a char * as parameter, which should contain the
specified range you want. It should be in the format
"X-Y", where X or Y may be left out. HTP transfers
also support several intervals, separated with commas
as in "X-Y,N-M". Using this kind of multiple intervals
will cause the HTP server to send the response docu-
ment in pieces (using standard MIME separation tech-
niques). Pass a NUL to this option to disable the use
of ranges.
Ranges work on HTP, FTP and FILE (since 7.18.0)
transfers only.
CURLOPTRESUMEFROM
Pass a long as parameter. It contains the offset in
number of bytes that you want the transfer to start
from. Set this option to 0 to make the transfer start
from the beginning (effectively disabling resume). For
FTP, set this option to -1 to make the transfer start
from the end of the target file (useful to continue an
interrupted upload).
CURLOPTRESUMEFROMLARGE
Pass a curlofft as parameter. It contains the offset
in number of bytes that you want the transfer to start
from. (Added in 7.11.0)
CURLOPTCUSTOMREQUEST
Pass a pointer to a zero terminated string as parame-
ter. It will be used instead of GET or HEAD when doing
libcurl 7.19.3 Last change: 11 Dec 2008 32
libcurl Manual curleasysetopt(3)
an HTP request, or instead of LIST or NLST when doing
a FTP directory listing. This is useful for doing
DELETE or other more or less obscure HTP requests.
Don't do this at will, make sure your server supports
the command first.
When you change the request method by setting
CURLOPTCUSTOMREQUEST to something, you don't actually
change how libcurl behaves or acts in regards to the
particular request method, it will only change the
actual string sent in the request.
For example: if you tell libcurl to do a HEAD request,
but then change the request to a "GET" with
CURLOPTCUSTOMREQUEST you'll still see libcurl act as
if it sent a HEAD even when it does send a GET.
To switch to a proper HEAD, use CURLOPTNOBODY, to
switch to a proper POST, use CURLOPTPOST or
CURLOPTPOSTFIELDS and so on.
Restore to the internal default by setting this to
NUL.
Many people have wrongly used this option to replace
the entire request with their own, including multiple
headers and POST contents. While that might work in
many cases, it will cause libcurl to send invalid
requests and it could possibly confuse the remote
server badly. Use CURLOPTPOST and CURLOPTPOSTFIELDS
to set POST data. Use CURLOPTHTPHEADER to replace or
extend the set of headers sent by libcurl. Use
CURLOPTHTPVERSION to change HTP version.
CURLOPTFILETIME
Pass a long. If it is 1, libcurl will attempt to get
the modification date of the remote document in this
operation. This requires that the remote server sends
the time or replies to a time querying command. The
curleasygetinfo(3) function with the
CURLINFOFILETIME argument can be used after a transfer
to extract the received time (if any).
CURLOPTNOBODY
A parameter set to 1 tells the library to not include
the body-part in the output. This is only relevant for
protocols that have separate header and body parts. On
HTP(S) servers, this will make libcurl do a HEAD
request.
To change request to GET, you should use
CURLOPTHTPGET. Change request to POST with
libcurl 7.19.3 Last change: 11 Dec 2008 33
libcurl Manual curleasysetopt(3)
CURLOPTPOST etc.
CURLOPTINFILESIZE
When uploading a file to a remote site, this option
should be used to tell libcurl what the expected size
of the infile is. This value should be passed as a
long. See also CURLOPTINFILESIZELARGE.
For uploading using SCP, this option or
CURLOPTINFILESIZELARGE is mandatory.
Note that this option does not limit how much data lib-
curl will actually send, as that is controlled entirely
by what the read callback returns.
CURLOPTINFILESIZELARGE
When uploading a file to a remote site, this option
should be used to tell libcurl what the expected size
of the infile is. This value should be passed as a
curlofft. (Added in 7.11.0)
For uploading using SCP, this option or
CURLOPTINFILESIZE is mandatory.
Note that this option does not limit how much data lib-
curl will actually send, as that is controlled entirely
by what the read callback returns.
CURLOPTUPLOAD
A parameter set to 1 tells the library to prepare for
an upload. The CURLOPTREADATA and CURLOPTINFILESIZE
or CURLOPTINFILESIZELARGE options are also interest-
ing for uploads. If the protocol is HTP, uploading
means using the PUT request unless you tell libcurl
otherwise.
Using PUT with HTP 1.1 implies the use of a "Expect:
100-continue" header. You can disable this header with
CURLOPTHTPHEADER as usual.
If you use PUT to a HTP 1.1 server, you can upload
data without knowing the size before starting the
transfer if you use chunked encoding. You enable this
by adding a header like "Transfer-Encoding: chunked"
with CURLOPTHTPHEADER. With HTP 1.0 or without
chunked transfer, you must specify the size.
CURLOPTMAXFILESIZE
Pass a long as parameter. This allows you to specify
the maximum size (in bytes) of a file to download. If
the file requested is larger than this value, the
transfer will not start and CURLEFILESIZEXCEDED
libcurl 7.19.3 Last change: 11 Dec 2008 34
libcurl Manual curleasysetopt(3)
will be returned.
The file size is not always known prior to download,
and for such files this option has no effect even if
the file transfer ends up being larger than this given
limit. This concerns both FTP and HTP transfers.
CURLOPTMAXFILESIZELARGE
Pass a curlofft as parameter. This allows you to
specify the maximum size (in bytes) of a file to down-
load. If the file requested is larger than this value,
the transfer will not start and CURLEFILESIZEXCEDED
will be returned. (Added in 7.11.0)
The file size is not always known prior to download,
and for such files this option has no effect even if
the file transfer ends up being larger than this given
limit. This concerns both FTP and HTP transfers.
CURLOPTIMECONDITION
Pass a long as parameter. This defines how the
CURLOPTIMEVALUE time value is treated. You can set
this parameter to CURLTIMECONDIFMODSINCE or
CURLTIMECONDIFUNMODSINCE. This feature applies to
HTP and FTP.
The last modification time of a file is not always
known and in such instances this feature will have no
effect even if the given time condition would not have
been met. curleasygetinfo(3) with the
CURLINFOCONDITIONUNMET option can be used after a
transfer to learn if a zero-byte successful "transfer"
was due to this condition not matching.
CURLOPTIMEVALUE
Pass a long as parameter. This should be the time in
seconds since 1 Jan 1970, and the time will be used in
a condition as specified with CURLOPTIMECONDITION.
CONECTION OPTIONS
CURLOPTIMEOUT
Pass a long as parameter containing the maximum time in
seconds that you allow the libcurl transfer operation
to take. Normally, name lookups can take a considerable
time and limiting operations to less than a few minutes
risk aborting perfectly normal operations. This option
will cause curl to use the SIGALRM to enable time-
outing system calls.
In unix-like systems, this might cause signals to be
used unless CURLOPTNOSIGNAL is set.
libcurl 7.19.3 Last change: 11 Dec 2008 35
libcurl Manual curleasysetopt(3)
CURLOPTIMEOUTMS
Like CURLOPTIMEOUT but takes number of milliseconds
instead. If libcurl is built to use the standard system
name resolver, that portion of the transfer will still
use full-second resolution for timeouts with a minimum
timeout allowed of one second. (Added in 7.16.2)
CURLOPTLOWSPEDLIMIT
Pass a long as parameter. It contains the transfer
speed in bytes per second that the transfer should be
below during CURLOPTLOWSPEDTIME seconds for the
library to consider it too slow and abort.
CURLOPTLOWSPEDTIME
Pass a long as parameter. It contains the time in
seconds that the transfer should be below the
CURLOPTLOWSPEDLIMIT for the library to consider it
too slow and abort.
CURLOPTMAXSENDSPEDLARGE
Pass a curlofft as parameter. If an upload exceeds
this speed (counted in bytes per second) on cumulative
average during the transfer, the transfer will pause to
keep the average rate less than or equal to the parame-
ter value. Defaults to unlimited speed. (Added in
7.15.5)
CURLOPTMAXRECVSPEDLARGE
Pass a curlofft as parameter. If a download exceeds
this speed (counted in bytes per second) on cumulative
average during the transfer, the transfer will pause to
keep the average rate less than or equal to the parame-
ter value. Defaults to unlimited speed. (Added in
7.15.5)
CURLOPTMAXCONECTS
Pass a long. The set number will be the persistent con-
nection cache size. The set amount will be the maximum
amount of simultaneously open connections that libcurl
may cache in this easy handle. Default is 5, and there
isn't much point in changing this value unless you are
perfectly aware of how this works and changes libcurl's
behaviour. This concerns connections using any of the
protocols that support persistent connections.
When reaching the maximum limit, curl closes the oldest
one in the cache to prevent increasing the number of
open connections.
If you already have performed transfers with this curl
handle, setting a smaller MAXCONECTS than before may
cause open connections to get closed unnecessarily.
libcurl 7.19.3 Last change: 11 Dec 2008 36
libcurl Manual curleasysetopt(3)
Note that if you add this easy handle to a multi han-
dle, this setting is not acknowledged, and you must
instead use curlmultisetopt(3) and the
CURLMOPTMAXCONECTS option.
CURLOPTCLOSEPOLICY
(Obsolete) This option does nothing.
CURLOPTFRESHCONECT
Pass a long. Set to 1 to make the next transfer use a
new (fresh) connection by force. If the connection
cache is full before this connection, one of the exist-
ing connections will be closed as according to the
selected or default policy. This option should be used
with caution and only if you understand what it does.
Set this to 0 to have libcurl attempt re-using an
existing connection (default behavior).
CURLOPTFORBIDREUSE
Pass a long. Set to 1 to make the next transfer expli-
citly close the connection when done. Normally, libcurl
keeps all connections alive when done with one transfer
in case a succeeding one follows that can re-use them.
This option should be used with caution and only if you
understand what it does. Set to 0 to have libcurl keep
the connection open for possible later re-use (default
behavior).
CURLOPTCONECTIMEOUT
Pass a long. It should contain the maximum time in
seconds that you allow the connection to the server to
take. This only limits the connection phase, once it
has connected, this option is of no more use. Set to
zero to disable connection timeout (it will then only
timeout on the system's internal timeouts). See also
the CURLOPTIMEOUT option.
In unix-like systems, this might cause signals to be
used unless CURLOPTNOSIGNAL is set.
CURLOPTCONECTIMEOUTMS
Like CURLOPTCONECTIMEOUT but takes the number of
milliseconds instead. If libcurl is built to use the
standard system name resolver, that portion of the con-
nect will still use full-second resolution for timeouts
with a minimum timeout allowed of one second. (Added
in 7.16.2)
CURLOPTIPRESOLVE
Allows an application to select what kind of IP
addresses to use when resolving host names. This is
only interesting when using host names that resolve
libcurl 7.19.3 Last change: 11 Dec 2008 37
libcurl Manual curleasysetopt(3)
addresses using more than one version of IP. The
allowed values are:
CURLIPRESOLVEWHATEVER
Default, resolves addresses to all IP versions
that your system allows.
CURLIPRESOLVEV4
Resolve to IPv4 addresses.
CURLIPRESOLVEV6
Resolve to IPv6 addresses.
CURLOPTCONECTONLY
Pass a long. If the parameter equals 1, it tells the
library to perform all the required proxy authentica-
tion and connection setup, but no data transfer. This
option is useful only on HTP URLs.
This option is useful with the CURLINFOLASTSOCKET
option to curleasygetinfo(3). The library can set up
the connection and then the application can obtain the
most recently used socket for special data transfers.
(Added in 7.15.2)
SL and SECURITY OPTIONS
CURLOPTSLCERT
Pass a pointer to a zero terminated string as parame-
ter. The string should be the file name of your certi-
ficate. The default format is "PEM" and can be changed
with CURLOPTSLCERTYPE.
With NS this is the nickname of the certificate you
wish to authenticate with.
CURLOPTSLCERTYPE
Pass a pointer to a zero terminated string as parame-
ter. The string should be the format of your certifi-
cate. Supported formats are "PEM" and "DER". (Added in
7.9.3)
CURLOPTSLKEY
Pass a pointer to a zero terminated string as parame-
ter. The string should be the file name of your private
key. The default format is "PEM" and can be changed
with CURLOPTSLKEYTYPE.
CURLOPTSLKEYTYPE
Pass a pointer to a zero terminated string as parame-
ter. The string should be the format of your private
key. Supported formats are "PEM", "DER" and "ENG".
libcurl 7.19.3 Last change: 11 Dec 2008 38
libcurl Manual curleasysetopt(3)
The format "ENG" enables you to load the private key
from a crypto engine. In this case CURLOPTSLKEY is
used as an identifier passed to the engine. You have to
set the crypto engine with CURLOPTSLENGINE. "DER"
format key file currently does not work because of a
bug in OpenSL.
CURLOPTKEYPASWD
Pass a pointer to a zero terminated string as parame-
ter. It will be used as the password required to use
the CURLOPTSLKEY or CURLOPTSHPRIVATEKEYFILE
private key. You never needed a pass phrase to load a
certificate but you need one to load your private key.
(This option was known as CURLOPTSLKEYPASWD up to
7.16.4 and CURLOPTSLCERTPASWD up to 7.9.2)
CURLOPTSLENGINE
Pass a pointer to a zero terminated string as parame-
ter. It will be used as the identifier for the crypto
engine you want to use for your private key.
If the crypto device cannot be loaded,
CURLESLENGINENOTFOUND is returned.
CURLOPTSLENGINEDEFAULT
Sets the actual crypto engine as the default for (asym-
metric) crypto operations.
If the crypto device cannot be set,
CURLESLENGINESETFAILED is returned.
Note that even though this option doesn't need any
parameter, in some configurations curleasysetopt
might be defined as a macro taking exactly three argu-
ments. Therefore, it's recommended to pass 1 as parame-
ter to this option.
CURLOPTSLVERSION
Pass a long as parameter to control what version of
SL/TLS to attempt to use. The available options are:
CURLSLVERSIONDEFAULT
The default action. This will attempt to figure
out the remote SL protocol version, i.e. either
SLv3 or TLSv1 (but not SLv2, which became dis-
abled by default with 7.18.1).
CURLSLVERSIONTLSv1
Force TLSv1
CURLSLVERSIONSLv2
libcurl 7.19.3 Last change: 11 Dec 2008 39
libcurl Manual curleasysetopt(3)
Force SLv2
CURLSLVERSIONSLv3
Force SLv3
CURLOPTSLVERIFYPER
Pass a long as parameter.
This option determines whether curl verifies the
authenticity of the peer's certificate. A value of 1
means curl verifies; zero means it doesn't. The
default is nonzero, but before 7.10, it was zero.
When negotiating an SL connection, the server sends a
certificate indicating its identity. Curl verifies
whether the certificate is authentic, i.e. that you can
trust that the server is who the certificate says it
is. This trust is based on a chain of digital signa-
tures, rooted in certification authority (CA) certifi-
cates you supply. As of 7.10, curl installs a default
bundle of CA certificates and you can specify alternate
certificates with the CURLOPTCAINFO option or the
CURLOPTCAPATH option.
When CURLOPTSLVERIFYPER is nonzero, and the verifi-
cation fails to prove that the certificate is authen-
tic, the connection fails. When the option is zero,
the connection succeeds regardless.
Authenticating the certificate is not by itself very
useful. You typically want to ensure that the server,
as authentically identified by its certificate, is the
server you mean to be talking to. Use
CURLOPTSLVERIFYHOST to control that.
CURLOPTCAINFO
Pass a char * to a zero terminated string naming a file
holding one or more certificates to verify the peer
with. This makes sense only when used in combination
with the CURLOPTSLVERIFYPER option. If
CURLOPTSLVERIFYPER is zero, CURLOPTCAINFO need not
even indicate an accessible file.
Note that option is by default set to the system path
where libcurl's cacert bundle is assumed to be stored,
as established at build time.
When built against NS, this is the directory that the
NS certificate database resides in.
CURLOPTISUERCERT
Pass a char * to a zero terminated string naming a file
libcurl 7.19.3 Last change: 11 Dec 2008 40
libcurl Manual curleasysetopt(3)
holding a CA certificate in PEM format. If the option
is set, an additional check against the peer certifi-
cate is performed to verify the issuer is indeed the
one associated with the certificate provided by the
option. This additional check is useful in multi-level
PKI where one needs to enforce that the peer certifi-
cate is from a specific branch of the tree.
This option makes sense only when used in combination
with the CURLOPTSLVERIFYPER option. Otherwise, the
result of the check is not considered as failure.
A specific error code (CURLESLISUEREROR) is
defined with the option, which is returned if the setup
of the SL/TLS session has failed due to a mismatch
with the issuer of peer certificate
(CURLOPTSLVERIFYPER has to be set too for the check
to fail). (Added in 7.19.0)
CURLOPTCAPATH
Pass a char * to a zero terminated string naming a
directory holding multiple CA certificates to verify
the peer with. The certificate directory must be
prepared using the openssl crehash utility. This makes
sense only when used in combination with the
CURLOPTSLVERIFYPER option. If
CURLOPTSLVERIFYPER is zero, CURLOPTCAPATH need not
even indicate an accessible path. The CURLOPTCAPATH
function apparently does not work in Windows due to
some limitation in openssl. This option is OpenSL-
specific and does nothing if libcurl is built to use
GnuTLS.
CURLOPTCRLFILE
Pass a char * to a zero terminated string naming a file
with the concatenation of CRL (in PEM format) to use in
the certificate validation that occurs during the SL
exchange.
When curl is built to use NS or GnuTLS, there is no
way to influence the use of CRL passed to help in the
verification process. When libcurl is built with
OpenSL support, X509VFLAGCRLCHECK and
X509VFLAGCRLCHECKAL are both set, requiring CRL
check against all the elements of the certificate chain
if a CRL file is passed.
This option makes sense only when used in combination
with the CURLOPTSLVERIFYPER option.
A specific error code (CURLESLCRLBADFILE) is
defined with the option. It is returned when the SL
libcurl 7.19.3 Last change: 11 Dec 2008 41
libcurl Manual curleasysetopt(3)
exchange fails because the CRL file cannot be loaded.
Note that a failure in certificate verification due to
a revocation information found in the CRL does not
trigger this specific error. (Added in 7.19.0)
CURLOPTCERTINFO
Pass a long set to 1 to enable libcurl's certificate
chain info gatherer. With this enabled, libcurl (if
built with OpenSL) will extract lots of information
and data about the certificates in the certificate
chain used in the SL connection. This data is then
possible to extract after a transfer using
curleasygetinfo(3) and its option CURLINFOCERTINFO.
(Added in 7.19.1)
CURLOPTRANDOMFILE
Pass a char * to a zero terminated file name. The file
will be used to read from to seed the random engine for
SL. The more random the specified file is, the more
secure the SL connection will become.
CURLOPTEGDSOCKET
Pass a char * to the zero terminated path name to the
Entropy Gathering Daemon socket. It will be used to
seed the random engine for SL.
CURLOPTSLVERIFYHOST
Pass a long as parameter.
This option determines whether libcurl verifies that
the server cert is for the server it is known as.
When negotiating a SL connection, the server sends a
certificate indicating its identity.
When CURLOPTSLVERIFYHOST is 2, that certificate must
indicate that the server is the server to which you
meant to connect, or the connection fails.
Curl considers the server the intended one when the
Common Name field or a Subject Alternate Name field in
the certificate matches the host name in the URL to
which you told Curl to connect.
When the value is 1, the certificate must contain a
Common Name field, but it doesn't matter what name it
says. (This is not ordinarily a useful setting).
When the value is 0, the connection succeeds regardless
of the names in the certificate.
The default, since 7.10, is 2.
libcurl 7.19.3 Last change: 11 Dec 2008 42
libcurl Manual curleasysetopt(3)
This option controls checking the server's claimed
identity. The server could be lying. To control
lying, see CURLOPTSLVERIFYPER.
CURLOPTSLCIPHERLIST
Pass a char *, pointing to a zero terminated string
holding the list of ciphers to use for the SL connec-
tion. The list must be syntactically correct, it con-
sists of one or more cipher strings separated by
colons. Commas or spaces are also acceptable separators
but colons are normally used, !, - and ] can be used as
operators.
For OpenSL and GnuTLS valid examples of cipher lists
include 'RC4-SHA', 'SHA1]DES', 'TLSv1' and 'DEFAULT'.
The default list is normally set when you compile
OpenSL.
You'll find more details about cipher lists on this
URL: http:/www.openssl.org/docs/apps/ciphers.html
For NS, valid examples of cipher lists include
'rsarc4128md5', 'rsaaes128sha', etc. With NS you
don't add/remove ciphers. If one uses this option then
all known ciphers are disabled and only those passed in
are enabled.
You'll find more details about the NS cipher lists on
this URL:
http:/directory.fedora.redhat.com/docs/modnss.html#Directives
CURLOPTSLSESIONIDCACHE
Pass a long set to 0 to disable libcurl's use of SL
session-ID caching. Set this to 1 to enable it. By
default all transfers are done using the cache. Note
that while nothing ever should get hurt by attempting
to reuse SL session-IDs, there seem to be broken SL
implementations in the wild that may require you to
disable this in order for you to succeed. (Added in
7.16.0)
CURLOPTKRBLEVEL
Pass a char * as parameter. Set the kerberos security
level for FTP; this also enables kerberos awareness.
This is a string, 'clear', 'safe', 'confidential' or
'private'. If the string is set but doesn't match one
of these, 'private' will be used. Set the string to
NUL to disable kerberos support for FTP.
(This option was known as CURLOPTKRB4LEVEL up to
7.16.3)
libcurl 7.19.3 Last change: 11 Dec 2008 43
libcurl Manual curleasysetopt(3)
SH OPTIONS
CURLOPTSHAUTHTYPES
Pass a long set to a bitmask consisting of one or more
of CURLSHAUTHPUBLICKEY, CURLSHAUTHPASWORD,
CURLSHAUTHOST, CURLSHAUTHKEYBOARD. Set
CURLSHAUTHANY to let libcurl pick one. (Added in
7.16.1)
CURLOPTSHOSTPUBLICKEYMD5
Pass a char * pointing to a string containing 32 hexa-
decimal digits. The string should be the 128 bit MD5
checksum of the remote host's public key, and libcurl
will reject the connection to the host unless the
md5sums match. This option is only for SCP and SFTP
transfers. (Added in 7.17.1)
CURLOPTSHPUBLICKEYFILE
Pass a char * pointing to a file name for your public
key. If not used, libcurl defaults to using
~/.ssh/iddsa.pub. (Added in 7.16.1)
CURLOPTSHPRIVATEKEYFILE
Pass a char * pointing to a file name for your private
key. If not used, libcurl defaults to using
~/.ssh/iddsa. If the file is password-protected, set
the password with CURLOPTKEYPASWD. (Added in 7.16.1)
OTHER OPTIONS
CURLOPTPRIVATE
Pass a void * as parameter, pointing to data that
should be associated with this curl handle. The
pointer can subsequently be retrieved using
curleasygetinfo(3) with the CURLINFOPRIVATE option.
libcurl itself does nothing with this data. (Added in
7.10.3)
CURLOPTSHARE
Pass a share handle as a parameter. The share handle
must have been created by a previous call to
curlshareinit(3). Setting this option, will make this
curl handle use the data from the shared handle instead
of keeping the data to itself. This enables several
curl handles to share data. If the curl handles are
used simultaneously, you MUST use the locking methods
in the share handle. See curlsharesetopt(3) for
details.
If you add a share that is set to share cookies, your
easy handle will use that cookie cache and get the
cookie engine enabled. If you unshare an object that
was using cookies (or change to another object that
doesn't share cookies), the easy handle will get its
libcurl 7.19.3 Last change: 11 Dec 2008 44
libcurl Manual curleasysetopt(3)
cookie engine disabled.
Data that the share object is not set to share will be
dealt with the usual way, as if no share was used.
CURLOPTNEWFILEPERMS
Pass a long as a parameter, containing the value of the
permissions that will be assigned to newly created
files on the remote server. The default value is 0644,
but any valid value can be used. The only protocols
that can use this are sftp:/, scp:/, and file:/.
(Added in 7.16.4)
CURLOPTNEWDIRECTORYPERMS
Pass a long as a parameter, containing the value of the
permissions that will be assigned to newly created
directories on the remote server. The default value is
0755, but any valid value can be used. The only proto-
cols that can use this are sftp:/, scp:/, and
file:/. (Added in 7.16.4)
TELNET OPTIONS
CURLOPTELNETOPTIONS
Provide a pointer to a curlslist with variables to
pass to the telnet negotiations. The variables should
be in the format