curl_easy_setopt(3)

NAME
curl_easy_setopt - Set curl easy-session options

SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLoption option, ...);

DESCRIPTION
curl_easy_setopt() is called to tell libcurl how to behave in a number of ways. Most operations in libcurl have default actions, and by using the appropriate options you can make them behave differently (as documented). All options are set with the option followed by a parameter. That parameter can be a long, a function pointer or an object pointer, all depending on what the option in question 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 curl_easy_setopt() calls in the setup phase. NOTE: strings passed to libcurl as 'char *' arguments, will not be copied by the library. Instead you should keep them available until libcurl no longer needs them. Failing to do so will cause very odd behaviour or even crashes. More note: the options set with this function call are valid for the forthcoming data transfers that are performed when you invoke curl_easy_perform . 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. The handle is the return code from the curl_easy_init call.

OPTIONS
These options are in a bit of random order, but you'll figure it out!

CURLOPT_FILE
    Data pointer to pass instead of FILE * to the file write function. Note that if you specify the CURLOPT_WRITEFUNCTION , this is the pointer you'll get as input. NOTE: If you're using libcurl as a win32 .DLL, you MUST use a CURLOPT_WRITEFUNCTION if you set the CURLOPT_FILE option.

CURLOPT_WRITEFUNCTION
    Function pointer that should use match the following prototype: size_t function( void *ptr, size_t size, size_t nmemb, FILE *stream); This function gets called by libcurl as soon as there is received data that needs to be written down. The size of the data pointed to by ptr is size multiplied with nmemb. Return the number of bytes actually written or return -1 to signal error to the library (it will cause it to abort the transfer).

CURLOPT_INFILE
    Data pointer to pass instead of FILE * to the file read function. Note that if you specify the CURLOPT_READFUNCTION , this is the pointer you'll get as input. NOTE: If you're using libcurl as a win32 .DLL, you MUST use a CURLOPT_READFUNCTION if you set the CURLOPT_INFILE option.

CURLOPT_READFUNCTION
    Function pointer that should use match the following prototype: size_t function( void *ptr, size_t size, size_t nmemb, FILE *stream); This function gets called by libcurl 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 -1 will signal an error to the library and cause it to abort the current transfer immediately.

CURLOPT_INFILESIZE
    When uploading a file to a remote site, this option should be used to tell libcurl what the expected size of the infile is.

CURLOPT_URL
    The actual URL to deal with. The parameter should be a char * to a zero terminated string. The string must remain present until curl no longer needs it, as it doesn't copy the string. NOTE: this option is required to be set before curl_easy_perform() is called.

CURLOPT_PROXY
    If you need libcurl to use a http proxy to access the outside world, set the proxy string with this option. The parameter should be a char * to a zero terminated string. 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.

CURLOPT_PROXYPORT
    Set this long with this option to set the proxy port to use unless it is specified in the proxy string CURLOPT_PROXY.

CURLOPT_HTTPPROXYTUNNEL
    Set the parameter to non-zero to get the library to tunnel all non-HTTP operations through the given HTTP proxy. Do note that there is a big difference to use a proxy and to tunnel through it. If you don't know what this means, you probably don't want this tunnel option. (Added in libcurl 7.3)

CURLOPT_VERBOSE
    Set the parameter to non-zero to get the library to display a lot of verbose information about its operations.

CURLOPT_HEADER
    A non-zero parameter tells the library to include the header in the output. This is only relevant for protocols that actually has a header preceeding the data (like HTTP).

CURLOPT_NOPROGRESS
    A non-zero parameter tells the library to shut of the built-in progress meter completely. (NOTE: future versions of the lib is likely to not have any built-in progress meter at all).

CURLOPT_NOBODY
    A non-zero parameter tells the library to not include the body-part in the output. This is only relevant for protocols that have a separate header and body part.

CURLOPT_FAILONERROR
    A non-zero parameter tells the library to fail silently if the HTTP code returned is equal or larger than 300. The default action would be to return the page normally, ignoring that code.

CURLOPT_UPLOAD
    A non-zero parameter tells the library to prepare for an upload. The CURLOPT_INFILE and CURLOPT_INFILESIZE are also interesting for uploads.

CURLOPT_POST
    A non-zero parameter tells the library to do a regular HTTP post. This is a normal application/x-www-form-urlencoded kind, which is the most commonly used one by HTML forms. See the CURLOPT_POSTFIELDS option for how to specify the data to post and CURLOPT_POSTFIELDSIZE in how to set the data size.

CURLOPT_FTPLISTONLY
    A non-zero parameter tells the library to just list the names of an ftp directory, instead of doing a full directory listin that would include file sizes, dates etc.

CURLOPT_FTPAPPEND
    A non-zero parameter tells the library to append to the remote file instead of overwrite it. This is only useful when uploading to a ftp site.

CURLOPT_NETRC
    A non-zero parameter tells the library to scan your ~/.netrc file to find user name and password for the remote site you are about to access. Do note that curl does not verify that the file has the correct properties set (as the standard unix ftp client does), and that only machine name, user name and password is taken into account (init macros and similar things aren't supported).

CURLOPT_FOLLOWLOCATION
    A non-zero parameter tells the library to follow any Location: header that the server sends as part of a HTTP header. NOTE that this means that the library will resend the same request on the new location and follow new Location: headers all the way until no more such headers are returned.

CURLOPT_TRANSFERTEXT
    A non-zero parameter tells the library to use ASCII mode for ftp transfers, instead of the default binary transfer. For LDAP transfers it gets the data in plain text instead of HTML and for win32 systems it does not set the stdout to binary mode. This option can be useable when transfering text data between system with different views on certain characters, such as newlines or similar.

CURLOPT_PUT
    A non-zero parameter tells the library to use HTTP PUT a file. The file to put must be set with CURLOPT_INFILE and CURLOPT_INFILESIZE.

CURLOPT_MUTE
    A non-zero parameter tells the library to be completely quiet.

CURLOPT_USERPWD
    Pass a char * as parameter, which should be [username]:[password] to use for the connection. If the password is left out, you will be prompted for it.

CURLOPT_PROXYUSERPWD
    Pass a char * as parameter, which should be [username]:[password] to use for the connection to the HTTP proxy. If the password is left out, you will be prompted for it.

CURLOPT_RANGE
    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. HTTP transfers also support several intervals, separated with commas as in X-Y,N-M response document in pieces.

CURLOPT_ERRORBUFFER
    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 the library. The buffer must be at least CURL_ERROR_SIZE big.

CURLOPT_TIMEOUT
    Pass a long as parameter containing the maximum time in seconds that you allow the libcurl transfer operation to take. Do note that normally, name lookups maky take a considerable time and that limiting the operation to less than a few minutes risk aborting perfectly normal operations. This option will cause curl to use the SIGALRM to enable timeouting system calls.

CURLOPT_POSTFIELDS
    Pass a char * as parameter, which should be the full data to post in a HTTP post operation. See also the CURLOPT_POST.

CURLOPT_POSTFIELDSIZE
    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. Also, when this option is used, you can post fully binary data which otherwise is likely to fail. If this size is set to zero, the library will use strlen() to get the data size. (Added in libcurl 7.2)

CURLOPT_REFERER
    Pass a pointer to a zero terminated string as parameter. 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.

CURLOPT_USERAGENT
    Pass a pointer to a zero terminated string as parameter. 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.

CURLOPT_FTPPORT
    Pass a pointer to a zero terminated string as parameter. 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, an network interface name (under unix) or just a '-' letter to let the library use your systems default IP address.

CURLOPT_LOW_SPEED_LIMIT
    Pass a long as parameter. It contains the transfer speed in bytes per second that the transfer should be below during CURLOPT_LOW_SPEED_TIME seconds for the library to consider it too slow and abort.

CURLOPT_LOW_SPEED_TIME
    Pass a long as parameter. It contains the time in seconds that the transfer should be below the CURLOPT_LOW_SPEED_LIMIT for the library to consider it too slow and abort.

CURLOPT_RESUME_FROM
    Pass a long as parameter. It contains the offset in number of bytes that you want the transfer to start from.

CURLOPT_COOKIE
    Pass a pointer to a zero terminated string as parameter. 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.

CURLOPT_HTTPHEADER
    Pass a pointer to a linked list of HTTP headers to pass to the server in your HTTP request. The linked list should be a fully valid list of 'struct curl_slist' structs properly filled in. Use curl_slist_append(3) to create the list and curl_slist_free_all(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 contents as in 'Accept:', the internally used header will just get disabled. Thus, using this option you can add new headers, replace internal headers and remove internal headers.

CURLOPT_HTTPPOST
    Tells libcurl you want a multipart/formdata HTTP POST to be made and you instruct what data to pass on to the server. Pass a pointer to a linked list of HTTP post structs as parameter. The linked list should be a fully valid list of 'struct HttpPost' structs properly filled in. The best and most elegant way to do this, is to use curl_formparse(3) as documented.

CURLOPT_SSLCERT
    Pass a pointer to a zero terminated string as parameter. The string should be the file name of your certficicate in PEM format.

CURLOPT_SSLCERTPASSWD
    Pass a pointer to a zero terminated string as parameter. It will be used as the password required to use the CURLOPT_SSLCERT certificate. If the password is not supplied, you will be prompted for it.

CURLOPT_CRLF
    Convert unix newlines to CRLF newlines on FTP uploads.

CURLOPT_QUOTE
    Pass a pointer to a linked list of FTP commands to pass to the server prior to your ftp request. The linked list should be a fully valid list of 'struct curl_slist' structs properly filled in. Use curl_slist_append(3) to append strings (commands) to the list, and clear the entire list afterwards with curl_slist_free_all(3)

CURLOPT_POSTQUOTE
    Pass a pointer to a linked list of FTP commands to pass to the server after your ftp transfer request. The linked list should be a fully valid list of struct curl_slist structs properly filled in as described for CURLOPT_QUOTE

CURLOPT_WRITEHEADER
    Pass a FILE * to be used to write the header part of the received data to. The headers are guaranteed to be written one-by-one to this file handle and only complete lines are written. Parsing headers should be easy enough using this.

CURLOPT_COOKIEFILE
    Pass a pointer to a zero terminated string as parameter. It should contain the name of your file holding cookie data. The cookie data may be in netscape cookie data format or just regular HTTP-style headers dumped to a file.

CURLOPT_SSLVERSION
    Pass a long as parameter. Set what version of SSL to attempt to use, 2 or 3. By default, the SSL library will try to solve this by itself although some servers make this difficult why you at times will have to use this option.

CURLOPT_TIMECONDITION
    Pass a long as parameter. This defines how the CURLOPT_TIMEVALUE time value is treated. You can set this parameter to TIMECOND_IFMODSINCE or TIMECOND_IFUNMODSINCE. This is aa HTTP-only feature. (TBD)

CURLOPT_TIMEVALUE
    Pass a long as parameter. This should be the time in seconds since 1 jan 1970, and the time will be used as specified in CURLOPT_TIMECONDITION or if that isn't used, it will be TIMECOND_IFMODSINCE by default.

CURLOPT_CUSTOMREQUEST
    Pass a pointer to a zero terminated string as parameter. It will be user instead of GET or HEAD when doing the HTTP request. This is useful for doing DELETE or other more obscure HTTP requests. Don't do this at will, make sure your server supports the command first.

CURLOPT_STDERR
    Pass a FILE * as parameter. This is the stream to use instead of stderr internally when reporting errors.

CURLOPT_INTERFACE
    Pass a char * as parameter. This set the interface name to use as outgoing network interface. The name can be an interface name, an IP address or a host name. (Added in libcurl 7.3)

CURLOPT_KRB4LEVEL
    Pass a char * as parameter. Set the krb4 security level, this also enables krb4 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 NULL to disable kerberos4. The kerberos support only works for FTP. (Added in libcurl 7.3)

CURLOPT_WRITEINFO
    (NOT PRESENT IN 7.4 or later!) Pass a pointer to a zero terminated string as parameter. It will be used to report information after a successful request. This string may contain variables that will be substituted by their contents when output. Described elsewhere.

CURLOPT_PROGRESSFUNCTION
    Function pointer that should match the curl_progress_callback prototype found in <curl/curl.h> This function gets called by libcurl instead of its internal equivalent. Unknown/unused argument values 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 CURLE_ABORTED_BY_CALLBACK.

CURLOPT_PROGRESSDATA
    Pass a pointer that will be untouched by libcurl and passed as the first argument in the progress callback set with CURLOPT_PROGRESSFUNCTION
     .

CURLOPT_SSL_VERIFYPEER
    Pass a long that is set to a non-zero value to make curl verify the peer's certificate. The certificate to verify against must be specified with the CURLOPT_CAINFO option. (Added in 7.4.2)

CURLOPT_CAINFO
    Pass a char * to a zero terminated file naming holding the certificate to verify the peer with. This only makes sense when used in combination with the CURLOPT_SSL_VERIFYPEER option. (Added in 7.4.2)

CURLOPT_PASSWDFUNCTION
    Pass a pointer to a curl_passwd_callback function that will then be called instead of the internal one if libcurl requests a password. The function must match this prototype: int my_getpass(void *client, char *prompt, char* buffer, int buflen ); If set to NULL, it equals to making the function always fail. If the function returns a non-zero value, it will abort the operation and an error (CURLE_BAD_PASSWORD_ENTERED) will be returned. client is a generic pointer, see CURLOPT_PASSWDDATA. prompt is a zero-terminated string that is text that prefixes the input request. buffer is a pointer to data where the entered password should be stored and buflen is the maximum number of bytes that may be written in the buffer. (Added in 7.4.2)

CURLOPT_PASSWDDATA
    Pass a void * to whatever data you want. The passed pointer will be the first argument sent to the specifed CURLOPT_PASSWDFUNCTION function. (Added in 7.4.2)

CURLOPT_FILETIME
    Pass a long. If it is a non-zero value, 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 curl_easy_getinfo() function with the CURLINFO_FILETIME argument can be used after a transfer to extract the received time (if any). (Added in 7.5)

CURLOPT_MAXREDIRS
    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. This option only makes sense if the CURLOPT_FOLLOWLOCATION is used at the same time. (Added in 7.5)

CURLOPT_MAXCONNECTS
    Pass a long. The set number will be the persistant connection cache size. The set amount will be the maximum amount of simultaneous connections that libcurl may cache between file transfers. Default is 5, and there isn't much point in changing this value unless you are perfectly aware of how this work and changes libcurl's behaviour. Note: if you have already performed transfers with this curl handle, setting a smaller MAXCONNECTS than before may cause open connections to unnecessarily get closed. (Added in 7.7)

CURLOPT_CLOSEPOLICY
    Pass a long. This option sets what policy libcurl should use when the connection cache is filled and one of the open connections has to be closed to make room for a new connection. This must be one of the CURLCLOSEPOLICY_* defines. Use CURLCLOSEPOLICY_LEAST_RECENTLY_USED to make libcurl close the connection that was least recently used, that connection is also least likely to be capable of re-use. Use CURLCLOSEPOLICY_OLDEST to make libcurl close the oldest connection, the one that was created first among the ones in the connection cache. The other close policies are not support yet. (Added in 7.7)

CURLOPT_FRESH_CONNECT
    Pass a long. Set to non-zero to make the next transfer use a new connection by force. If the connection cache is full before this connection, one of the existinf connections will be closed as according to the set policy. This option should be used with caution and only if you understand what it does. Set to 0 to have libcurl attempt re-use of an existing connection. (Added in 7.7)

CURLOPT_FORBID_REUSE
    Pass a long. Set to non-zero to make the next transfer explicitly close the connection when done. Normally, libcurl keep all connections alive when done with one transfer in case there comes a succeeding one 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 possibly later re-use. (Added in 7.7)

CURLOPT_RANDOM_FILE
    Pass a char * to a zero terminated file name. The file will be used to read from to seed the random engine for SSL. The more random the specified file is, the more secure will the SSL connection become.

CURLOPT_FORBID_REUSE
    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 SSL.

CURLOPT_CONNECTTIMEOUT
    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). This option doesn't work in win32 systems. See also the CURLOPT_TIMEOUT option.

RETURN VALUE
0 means the option was set properly, non-zero means an error as <curl/curl.h> defines

SEE ALSO
curl_easy_init(3), curl_easy_cleanup(3),

BUGS
Surely there are some, you tell me!