Scroll to navigation

curl_easy_setopt(3) libcurl Manual curl_easy_setopt(3)

NAME

curl_easy_setopt - set options for a curl easy handle

SYNOPSIS

#include <curl/curl.h>

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

DESCRIPTION

curl_easy_setopt(3) is used to tell libcurl how to behave. By setting the appropriate options, the application can change libcurl's behavior. All options are set with an option followed by a parameter. That parameter can be a long, a function pointer, an object pointer or a curl_off_t, 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 curl_easy_setopt(3) calls in the setup phase.

Options set with this function call are valid for all forthcoming 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 curl_easy_reset(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 curl_easy_setopt(3) returns. The only exception to this rule is really CURLOPT_POSTFIELDS(3), but the alternative that copies the string CURLOPT_COPYPOSTFIELDS(3) has some usage characteristics you need to read up on.

The order in which the options are set does not matter.

Before version 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 curl_easy_init(3) or curl_easy_duphandle(3) call.

BEHAVIOR OPTIONS

Display verbose information. See CURLOPT_VERBOSE(3)
Include the header in the body output. See CURLOPT_HEADER(3)
Shut off the progress meter. See CURLOPT_NOPROGRESS(3)
Do not install signal handlers. See CURLOPT_NOSIGNAL(3)
Transfer multiple files according to a file name pattern. See CURLOPT_WILDCARDMATCH(3)

CALLBACK OPTIONS

Callback for writing data. See CURLOPT_WRITEFUNCTION(3)
Data pointer to pass to the write callback. See CURLOPT_WRITEDATA(3)
Callback for reading data. See CURLOPT_READFUNCTION(3)
Data pointer to pass to the read callback. See CURLOPT_READDATA(3)
Callback for I/O operations. See CURLOPT_IOCTLFUNCTION(3)
Data pointer to pass to the I/O callback. See CURLOPT_IOCTLDATA(3)
Callback for seek operations. See CURLOPT_SEEKFUNCTION(3)
Data pointer to pass to the seek callback. See CURLOPT_SEEKDATA(3)
Callback for sockopt operations. See CURLOPT_SOCKOPTFUNCTION(3)
Data pointer to pass to the sockopt callback. See CURLOPT_SOCKOPTDATA(3)
Callback for socket creation. See CURLOPT_OPENSOCKETFUNCTION(3)
Data pointer to pass to the open socket callback. See CURLOPT_OPENSOCKETDATA(3)
Callback for closing socket. See CURLOPT_CLOSESOCKETFUNCTION(3)
Data pointer to pass to the close socket callback. See CURLOPT_CLOSESOCKETDATA(3)
OBSOLETE callback for progress meter. See CURLOPT_PROGRESSFUNCTION(3)
Data pointer to pass to the progress meter callback. See CURLOPT_PROGRESSDATA(3)
Callback for progress meter. See CURLOPT_XFERINFOFUNCTION(3)
Data pointer to pass to the progress meter callback. See CURLOPT_XFERINFODATA(3)
Callback for writing received headers. See CURLOPT_HEADERFUNCTION(3)
Data pointer to pass to the header callback. See CURLOPT_HEADERDATA(3)
Callback for debug information. See CURLOPT_DEBUGFUNCTION(3)
Data pointer to pass to the debug callback. See CURLOPT_DEBUGDATA(3)
Callback for SSL context logic. See CURLOPT_SSL_CTX_FUNCTION(3)
Data pointer to pass to the SSL context callback. See CURLOPT_SSL_CTX_DATA(3)
Callback for code base conversion. See CURLOPT_CONV_TO_NETWORK_FUNCTION(3)
Callback for code base conversion. See CURLOPT_CONV_FROM_NETWORK_FUNCTION(3)
Callback for code base conversion. See CURLOPT_CONV_FROM_UTF8_FUNCTION(3)
Callback for RTSP interleaved data. See CURLOPT_INTERLEAVEFUNCTION(3)
Data pointer to pass to the RTSP interleave callback. See CURLOPT_INTERLEAVEDATA(3)
Callback for wildcard download start of chunk. See CURLOPT_CHUNK_BGN_FUNCTION(3)
Callback for wildcard download end of chunk. See CURLOPT_CHUNK_END_FUNCTION(3)
Data pointer to pass to the chunk callbacks. See CURLOPT_CHUNK_DATA(3)
Callback for wildcard matching. See CURLOPT_FNMATCH_FUNCTION(3)
Data pointer to pass to the wildcard matching callback. See CURLOPT_FNMATCH_DATA(3)
Suppress proxy CONNECT response headers from user callbacks. See CURLOPT_SUPPRESS_CONNECT_HEADERS(3)
Callback to be called before a new resolve request is started. See CURLOPT_RESOLVER_START_FUNCTION(3)
Data pointer to pass to resolver start callback. See CURLOPT_RESOLVER_START_DATA(3)

ERROR OPTIONS

Error message buffer. See CURLOPT_ERRORBUFFER(3)
stderr replacement stream. See CURLOPT_STDERR(3)
Fail on HTTP 4xx errors. CURLOPT_FAILONERROR(3)
Keep sending on HTTP >= 300 errors. CURLOPT_KEEP_SENDING_ON_ERROR(3)

NETWORK OPTIONS

URL to work on. See CURLOPT_URL(3)
Disable squashing /../ and /./ sequences in the path. See CURLOPT_PATH_AS_IS(3)
Allowed protocols. See CURLOPT_PROTOCOLS(3)
Protocols to allow redirects to. See CURLOPT_REDIR_PROTOCOLS(3)
Default protocol. See CURLOPT_DEFAULT_PROTOCOL(3)
Proxy to use. See CURLOPT_PROXY(3)
Socks proxy to use. See CURLOPT_PRE_PROXY(3)
Proxy port to use. See CURLOPT_PROXYPORT(3)
Proxy type. See CURLOPT_PROXYTYPE(3)
Filter out hosts from proxy use. CURLOPT_NOPROXY(3)
Tunnel through the HTTP proxy. CURLOPT_HTTPPROXYTUNNEL(3)
Connect to a specific host and port. See CURLOPT_CONNECT_TO(3)
Socks5 authentication methods. See CURLOPT_SOCKS5_AUTH(3)
Socks5 GSSAPI service name. CURLOPT_SOCKS5_GSSAPI_SERVICE(3)
Socks5 GSSAPI NEC mode. See CURLOPT_SOCKS5_GSSAPI_NEC(3)
Proxy authentication service name. CURLOPT_PROXY_SERVICE_NAME(3)
Send an HAProxy PROXY protocol v1 header. See CURLOPT_HAPROXYPROTOCOL(3)
Authentication service name. CURLOPT_SERVICE_NAME(3)
Bind connection locally to this. See CURLOPT_INTERFACE(3)
Bind connection locally to this port. See CURLOPT_LOCALPORT(3)
Bind connection locally to port range. See CURLOPT_LOCALPORTRANGE(3)
Timeout for DNS cache. See CURLOPT_DNS_CACHE_TIMEOUT(3)
OBSOLETE Enable global DNS cache. See CURLOPT_DNS_USE_GLOBAL_CACHE(3)
Ask for alternate buffer size. See CURLOPT_BUFFERSIZE(3)
Port number to connect to. See CURLOPT_PORT(3)
Enable TFO, TCP Fast Open. See CURLOPT_TCP_FASTOPEN(3)
Disable the Nagle algorithm. See CURLOPT_TCP_NODELAY(3)
IPv6 scope for local addresses. See CURLOPT_ADDRESS_SCOPE(3)
Enable TCP keep-alive. See CURLOPT_TCP_KEEPALIVE(3)
Idle time before sending keep-alive. See CURLOPT_TCP_KEEPIDLE(3)
Interval between keep-alive probes. See CURLOPT_TCP_KEEPINTVL(3)
Path to a Unix domain socket. See CURLOPT_UNIX_SOCKET_PATH(3)
Path to an abstract Unix domain socket. See CURLOPT_ABSTRACT_UNIX_SOCKET(3)

NAMES and PASSWORDS OPTIONS (Authentication)

Enable .netrc parsing. See CURLOPT_NETRC(3)
.netrc file name. See CURLOPT_NETRC_FILE(3)
User name and password. See CURLOPT_USERPWD(3)
Proxy user name and password. See CURLOPT_PROXYUSERPWD(3)
User name. See CURLOPT_USERNAME(3)
Password. See CURLOPT_PASSWORD(3)
Login options. See CURLOPT_LOGIN_OPTIONS(3)
Proxy user name. See CURLOPT_PROXYUSERNAME(3)
Proxy password. See CURLOPT_PROXYPASSWORD(3)
HTTP server authentication methods. See CURLOPT_HTTPAUTH(3)
TLS authentication user name. See CURLOPT_TLSAUTH_USERNAME(3)
Proxy TLS authentication user name. See CURLOPT_PROXY_TLSAUTH_USERNAME(3)
TLS authentication password. See CURLOPT_TLSAUTH_PASSWORD(3)
Proxy TLS authentication password. See CURLOPT_PROXY_TLSAUTH_PASSWORD(3)
TLS authentication methods. See CURLOPT_TLSAUTH_TYPE(3)
Proxy TLS authentication methods. See CURLOPT_PROXY_TLSAUTH_TYPE(3)
HTTP proxy authentication methods. See CURLOPT_PROXYAUTH(3)
Enable SASL initial response. See CURLOPT_SASL_IR(3)
OAuth2 bearer token. See CURLOPT_XOAUTH2_BEARER(3)
Don't allow username in URL. See CURLOPT_DISALLOW_USERNAME_IN_URL(3)

HTTP OPTIONS

Automatically set Referer: header. See CURLOPT_AUTOREFERER(3)
Accept-Encoding and automatic decompressing data. See CURLOPT_ACCEPT_ENCODING(3)
Request Transfer-Encoding. See CURLOPT_TRANSFER_ENCODING(3)
Follow HTTP redirects. See CURLOPT_FOLLOWLOCATION(3)
Do not restrict authentication to original host. CURLOPT_UNRESTRICTED_AUTH(3)
Maximum number of redirects to follow. See CURLOPT_MAXREDIRS(3)
How to act on redirects after POST. See CURLOPT_POSTREDIR(3)
Issue an HTTP PUT request. See CURLOPT_PUT(3)
Issue an HTTP POST request. See CURLOPT_POST(3)
Send a POST with this data. See CURLOPT_POSTFIELDS(3)
The POST data is this big. See CURLOPT_POSTFIELDSIZE(3)
The POST data is this big. See CURLOPT_POSTFIELDSIZE_LARGE(3)
Send a POST with this data - and copy it. See CURLOPT_COPYPOSTFIELDS(3)
Multipart formpost HTTP POST. See CURLOPT_HTTPPOST(3)
Referer: header. See CURLOPT_REFERER(3)
User-Agent: header. See CURLOPT_USERAGENT(3)
Custom HTTP headers. See CURLOPT_HTTPHEADER(3)
Control custom headers. See CURLOPT_HEADEROPT(3)
Custom HTTP headers sent to proxy. See CURLOPT_PROXYHEADER(3)
Alternative versions of 200 OK. See CURLOPT_HTTP200ALIASES(3)
Cookie(s) to send. See CURLOPT_COOKIE(3)
File to read cookies from. See CURLOPT_COOKIEFILE(3)
File to write cookies to. See CURLOPT_COOKIEJAR(3)
Start a new cookie session. See CURLOPT_COOKIESESSION(3)
Add or control cookies. See CURLOPT_COOKIELIST(3)
Do an HTTP GET request. See CURLOPT_HTTPGET(3)
Set the request target. CURLOPT_REQUEST_TARGET(3)
HTTP version to use. CURLOPT_HTTP_VERSION(3)
Ignore Content-Length. See CURLOPT_IGNORE_CONTENT_LENGTH(3)
Disable Content decoding. See CURLOPT_HTTP_CONTENT_DECODING(3)
Disable Transfer decoding. See CURLOPT_HTTP_TRANSFER_DECODING(3)
100-continue timeout. See CURLOPT_EXPECT_100_TIMEOUT_MS(3)
Wait on connection to pipeline on it. See CURLOPT_PIPEWAIT(3)
This HTTP/2 stream depends on another. See CURLOPT_STREAM_DEPENDS(3)
This HTTP/2 stream depends on another exclusively. See CURLOPT_STREAM_DEPENDS_E(3)
Set this HTTP/2 stream's weight. See CURLOPT_STREAM_WEIGHT(3)

SMTP OPTIONS

Address of the sender. See CURLOPT_MAIL_FROM(3)
Address of the recipients. See CURLOPT_MAIL_RCPT(3)
Authentication address. See CURLOPT_MAIL_AUTH(3)

TFTP OPTIONS

TFTP block size. See CURLOPT_TFTP_BLKSIZE(3)
Do not send TFTP options requests. See CURLOPT_TFTP_NO_OPTIONS(3)

FTP OPTIONS

Use active FTP. See CURLOPT_FTPPORT(3)
Commands to run before transfer. See CURLOPT_QUOTE(3)
Commands to run after transfer. See CURLOPT_POSTQUOTE(3)
Commands to run just before transfer. See CURLOPT_PREQUOTE(3)
Append to remote file. See CURLOPT_APPEND(3)
Use EPTR. See CURLOPT_FTP_USE_EPRT(3)
Use EPSV. See CURLOPT_FTP_USE_EPSV(3)
Use PRET. See CURLOPT_FTP_USE_PRET(3)
Create missing directories on the remote server. See CURLOPT_FTP_CREATE_MISSING_DIRS(3)
Timeout for FTP responses. See CURLOPT_FTP_RESPONSE_TIMEOUT(3)
Alternative to USER. See CURLOPT_FTP_ALTERNATIVE_TO_USER(3)
Ignore the IP address in the PASV response. See CURLOPT_FTP_SKIP_PASV_IP(3)
Control how to do TLS. See CURLOPT_FTPSSLAUTH(3)
Back to non-TLS again after authentication. See CURLOPT_FTP_SSL_CCC(3)
Send ACCT command. See CURLOPT_FTP_ACCOUNT(3)
Specify how to reach files. See CURLOPT_FTP_FILEMETHOD(3)

RTSP OPTIONS

RTSP request. See CURLOPT_RTSP_REQUEST(3)
RTSP session-id. See CURLOPT_RTSP_SESSION_ID(3)
RTSP stream URI. See CURLOPT_RTSP_STREAM_URI(3)
RTSP Transport: header. See CURLOPT_RTSP_TRANSPORT(3)
Client CSEQ number. See CURLOPT_RTSP_CLIENT_CSEQ(3)
CSEQ number for RTSP Server->Client request. See CURLOPT_RTSP_SERVER_CSEQ(3)

PROTOCOL OPTIONS

Use text transfer. See CURLOPT_TRANSFERTEXT(3)
Add transfer mode to URL over proxy. See CURLOPT_PROXY_TRANSFER_MODE(3)
Convert newlines. See CURLOPT_CRLF(3)
Range requests. See CURLOPT_RANGE(3)
Resume a transfer. See CURLOPT_RESUME_FROM(3)
Resume a transfer. See CURLOPT_RESUME_FROM_LARGE(3)
Custom request/method. See CURLOPT_CUSTOMREQUEST(3)
Request file modification date and time. See CURLOPT_FILETIME(3)
List only. See CURLOPT_DIRLISTONLY(3)
Do not get the body contents. See CURLOPT_NOBODY(3)
Size of file to send. CURLOPT_INFILESIZE(3)
Size of file to send. CURLOPT_INFILESIZE_LARGE(3)
Upload data. See CURLOPT_UPLOAD(3)
Post/send MIME data. See CURLOPT_MIMEPOST(3)
Maximum file size to get. See CURLOPT_MAXFILESIZE(3)
Maximum file size to get. See CURLOPT_MAXFILESIZE_LARGE(3)
Make a time conditional request. See CURLOPT_TIMECONDITION(3)
Time value for the time conditional request. See CURLOPT_TIMEVALUE(3)
Time value for the time conditional request. See CURLOPT_TIMEVALUE_LARGE(3)

CONNECTION OPTIONS

Timeout for the entire request. See CURLOPT_TIMEOUT(3)
Millisecond timeout for the entire request. See CURLOPT_TIMEOUT_MS(3)
Low speed limit to abort transfer. See CURLOPT_LOW_SPEED_LIMIT(3)
Time to be below the speed to trigger low speed abort. See CURLOPT_LOW_SPEED_TIME(3)
Cap the upload speed to this. See CURLOPT_MAX_SEND_SPEED_LARGE(3)
Cap the download speed to this. See CURLOPT_MAX_RECV_SPEED_LARGE(3)
Maximum number of connections in the connection pool. See CURLOPT_MAXCONNECTS(3)
Use a new connection. CURLOPT_FRESH_CONNECT(3)
Prevent subsequent connections from re-using this. See CURLOPT_FORBID_REUSE(3)
Timeout for the connection phase. See CURLOPT_CONNECTTIMEOUT(3)
Millisecond timeout for the connection phase. See CURLOPT_CONNECTTIMEOUT_MS(3)
IP version to resolve to. See CURLOPT_IPRESOLVE(3)
Only connect, nothing else. See CURLOPT_CONNECT_ONLY(3)
Use TLS/SSL. See CURLOPT_USE_SSL(3)
Provide fixed/fake name resolves. See CURLOPT_RESOLVE(3)
Bind name resolves to this interface. See CURLOPT_DNS_INTERFACE(3)
Bind name resolves to this IP4 address. See CURLOPT_DNS_LOCAL_IP4(3)
Bind name resolves to this IP6 address. See CURLOPT_DNS_LOCAL_IP6(3)
Preferred DNS servers. See CURLOPT_DNS_SERVERS(3)
Shuffle addresses before use. See CURLOPT_DNS_SHUFFLE_ADDRESSES(3)
Timeout for waiting for the server's connect back to be accepted. See CURLOPT_ACCEPTTIMEOUT_MS(3)
Timeout for happy eyeballs. See CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS(3)

SSL and SECURITY OPTIONS

Client cert. See CURLOPT_SSLCERT(3)
Proxy client cert. See CURLOPT_PROXY_SSLCERT(3)
Client cert type. See CURLOPT_SSLCERTTYPE(3)
Proxy client cert type. See CURLOPT_PROXY_SSLCERTTYPE(3)
Client key. See CURLOPT_SSLKEY(3)
Proxy client key. See CURLOPT_PROXY_SSLKEY(3)
Client key type. See CURLOPT_SSLKEYTYPE(3)
Proxy client key type. See CURLOPT_PROXY_SSLKEYTYPE(3)
Client key password. See CURLOPT_KEYPASSWD(3)
Proxy client key password. See CURLOPT_PROXY_KEYPASSWD(3)
Enable use of ALPN. See CURLOPT_SSL_ENABLE_ALPN(3)
Enable use of NPN. See CURLOPT_SSL_ENABLE_NPN(3)
Use identifier with SSL engine. See CURLOPT_SSLENGINE(3)
Default SSL engine. See CURLOPT_SSLENGINE_DEFAULT(3)
Enable TLS False Start. See CURLOPT_SSL_FALSESTART(3)
SSL version to use. See CURLOPT_SSLVERSION(3)
Proxy SSL version to use. See CURLOPT_PROXY_SSLVERSION(3)
Verify the host name in the SSL certificate. See CURLOPT_SSL_VERIFYHOST(3)
Verify the host name in the proxy SSL certificate. See CURLOPT_PROXY_SSL_VERIFYHOST(3)
Verify the SSL certificate. See CURLOPT_SSL_VERIFYPEER(3)
Verify the proxy SSL certificate. See CURLOPT_PROXY_SSL_VERIFYPEER(3)
Verify the SSL certificate's status. See CURLOPT_SSL_VERIFYSTATUS(3)
CA cert bundle. See CURLOPT_CAINFO(3)
Proxy CA cert bundle. See CURLOPT_PROXY_CAINFO(3)
Issuer certificate. See CURLOPT_ISSUERCERT(3)
Path to CA cert bundle. See CURLOPT_CAPATH(3)
Path to proxy CA cert bundle. See CURLOPT_PROXY_CAPATH(3)
Certificate Revocation List. See CURLOPT_CRLFILE(3)
Proxy Certificate Revocation List. See CURLOPT_PROXY_CRLFILE(3)
Extract certificate info. See CURLOPT_CERTINFO(3)
Set pinned SSL public key . See CURLOPT_PINNEDPUBLICKEY(3)
Set the proxy's pinned SSL public key. See CURLOPT_PROXY_PINNEDPUBLICKEY(3)
Provide source for entropy random data. See CURLOPT_RANDOM_FILE(3)
Identify EGD socket for entropy. See CURLOPT_EGDSOCKET(3)
Ciphers to use. See CURLOPT_SSL_CIPHER_LIST(3)
Proxy ciphers to use. See CURLOPT_PROXY_SSL_CIPHER_LIST(3)
TLS 1.3 cipher suites to use. See CURLOPT_TLS13_CIPHERS(3)
Proxy TLS 1.3 cipher suites to use. See CURLOPT_PROXY_TLS13_CIPHERS(3)
Disable SSL session-id cache. See CURLOPT_SSL_SESSIONID_CACHE(3)
Control SSL behavior. See CURLOPT_SSL_OPTIONS(3)
Control proxy SSL behavior. See CURLOPT_PROXY_SSL_OPTIONS(3)
Kerberos security level. See CURLOPT_KRBLEVEL(3)
Disable GSS-API delegation. See CURLOPT_GSSAPI_DELEGATION(3)

SSH OPTIONS

SSH authentication types. See CURLOPT_SSH_AUTH_TYPES(3)
Enable SSH compression. See CURLOPT_SSH_COMPRESSION(3)
MD5 of host's public key. See CURLOPT_SSH_HOST_PUBLIC_KEY_MD5(3)
File name of public key. See CURLOPT_SSH_PUBLIC_KEYFILE(3)
File name of private key. See CURLOPT_SSH_PRIVATE_KEYFILE(3)
File name with known hosts. See CURLOPT_SSH_KNOWNHOSTS(3)
Callback for known hosts handling. See CURLOPT_SSH_KEYFUNCTION(3)
Custom pointer to pass to ssh key callback. See CURLOPT_SSH_KEYDATA(3)

OTHER OPTIONS

Private pointer to store. See CURLOPT_PRIVATE(3)
Share object to use. See CURLOPT_SHARE(3)
Mode for creating new remote files. See CURLOPT_NEW_FILE_PERMS(3)
Mode for creating new remote directories. See CURLOPT_NEW_DIRECTORY_PERMS(3)

TELNET OPTIONS

TELNET options. See CURLOPT_TELNETOPTIONS(3)

RETURN VALUE

CURLE_OK (zero) means that the option was set properly, non-zero means an error occurred as <curl/curl.h> defines. See the libcurl-errors(3) man page for the full list with descriptions.

If you try to set an option that libcurl doesn't know about, perhaps because the library is too old to support it or the option was removed in a recent version, this function will return CURLE_UNKNOWN_OPTION. If support for the option was disabled at compile-time, it will return CURLE_NOT_BUILT_IN.

EXAMPLE

CURL *curl = curl_easy_init();
if(curl) {

CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
res = curl_easy_perform(curl);
curl_easy_cleanup(curl); }

SEE ALSO

curl_easy_init(3), curl_easy_cleanup(3), curl_easy_reset(3), curl_easy_getinfo(3), curl_multi_setopt(3),

February 25, 2018 libcurl 7.61.1