Provided by: libcurl4-doc_7.35.0-1ubuntu2.20_all bug

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()  is  used  to  tell  libcurl  how  to  behave.  By  using  the  appropriate options to
       curl_easy_setopt, 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 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() 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() returns. Exceptions to
       this rule are described in the option details below.

       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

       CURLOPT_VERBOSE
              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  understanding.  The  verbose
              information  will  be sent to stderr, or the stream set with CURLOPT_STDERR. The default value for
              this parameter is 0.

              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 CURLOPT_DEBUGFUNCTION.

       CURLOPT_HEADER
              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  HTTP).  The  default
              value for this parameter is 0.

       CURLOPT_NOPROGRESS
              Pass  a long. If set to 1, it tells the library to shut off the progress meter completely. It will
              also prevent the  CURLOPT_PROGRESSFUNCTION  from  getting  called.  The  default  value  for  this
              parameter is 1.

              Future versions of libcurl are likely to not have any built-in progress meter at all.

       CURLOPT_NOSIGNAL
              Pass  a  long.  If it is 1, libcurl will not use any functions 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.  The default value for this parameter is 0.  (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.

              Setting  CURLOPT_NOSIGNAL  to  1 makes libcurl NOT ask the system to ignore SIGPIPE signals, which
              otherwise are sent by the system when trying to send data to a socket which is closed in the other
              end. libcurl makes an effort to never cause such SIGPIPEs to trigger, but some  operating  systems
              have  no  way  to avoid them and even on those that have there are some corner cases when they may
              still happen, contrary to our desire. In addition,  using  CURLAUTH_NTLM_WB  authentication  could
              cause a SIGCHLD signal to be raised.

       CURLOPT_WILDCARDMATCH
              Set  this option to 1 if you want to transfer multiple files according to a file name pattern. The
              pattern can be specified as part of the CURLOPT_URL option, using an fnmatch-like  pattern  (Shell
              Pattern Matching) in the last part of URL (file name).

              By  default,  libcurl uses its internal wildcard matching implementation. You can provide your own
              matching function by the CURLOPT_FNMATCH_FUNCTION option.

              This feature is only supported by the FTP download for now.

              A brief introduction of its syntax follows:

              * - ASTERISK
                     ftp://example.com/some/path/*.txt (for all txt's from the root directory)

              ? - QUESTION MARK
                     Question mark matches any (exactly one) character.

                     ftp://example.com/some/path/photo?.jpeg

              [ - BRACKET EXPRESSION
                     The left bracket opens a bracket expression. The question mark and asterisk have no special
                     meaning in a bracket expression. Each bracket expression ends  by  the  right  bracket  and
                     matches exactly one character. Some examples follow:

                     [a-zA-Z0-9] or [f-gF-G] - character interval

                     [abc] - character enumeration

                     [^abc] or [!abc] - negation

                     [[:name:]] class expression. Supported classes are alnum,lower, space, alpha, digit, print,
                     upper, blank, graph, xdigit.

                     [][-!^]  -  special case - matches only '-', ']', '[', '!' or '^'. These characters have no
                     special purpose.

                     [\[\]\\] - escape syntax. Matches '[', ']' or '\'.

                     Using the rules above, a file name pattern can be constructed:

                     ftp://example.com/some/path/[a-z[:upper:]\\].jpeg

       (This was added in 7.21.0)

CALLBACK OPTIONS

       CURLOPT_WRITEFUNCTION
              Pass a pointer to a function that matches the following prototype:  size_t  function(  char  *ptr,
              size_t  size, size_t nmemb, void *userdata); This function gets called by libcurl 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.
              This will abort the transfer and return CURLE_WRITE_ERROR.

              From  7.18.0,  the  function can return CURL_WRITEFUNC_PAUSE which then will cause writing to this
              connection to become paused. See curl_easy_pause(3) for further details.

              This function may be called with zero bytes data if the transferred file is empty.

              Set this option to NULL to get the internal default function. The internal default  function  will
              write the data to the FILE * given with CURLOPT_WRITEDATA.

              Set the userdata argument with the CURLOPT_WRITEDATA 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 body
              data  that  can  be  passed  to  the  write  callback  is  defined  in  the  curl.h  header  file:
              CURL_MAX_WRITE_SIZE  (the  usual  default  is  16K). If you however have CURLOPT_HEADER set, which
              sends header data to the write callback, you can get up to CURL_MAX_HTTP_HEADER  bytes  of  header
              data passed into it. This usually means 100K.

       CURLOPT_WRITEDATA
              Data pointer to pass to the file write function. If you use the CURLOPT_WRITEFUNCTION option, this
              is the pointer you'll get as input. If you don't use a callback, you must pass a 'FILE *' (cast to
              'void  *') as libcurl will pass this to fwrite() when writing data.  By default, the value of this
              parameter is unspecified.

              The internal CURLOPT_WRITEFUNCTION 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 DLL, you MUST use the CURLOPT_WRITEFUNCTION  if  you  set  this
              option or you will experience crashes.

              This  option  is  also  known  with  the  older  name CURLOPT_FILE, the name CURLOPT_WRITEDATA was
              introduced in 7.9.7.

       CURLOPT_READFUNCTION
              Pass a pointer to a function that matches the following prototype:  size_t  function(  void  *ptr,
              size_t  size,  size_t  nmemb,  void *userdata); 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 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  CURL_READFUNC_ABORT  to  stop  the  current  operation  immediately,
              resulting in a CURLE_ABORTED_BY_CALLBACK error code from the transfer (Added in 7.12.1)

              From  7.18.0,  the function can return CURL_READFUNC_PAUSE which then will cause reading from this
              connection to become paused. See curl_easy_pause(3) for further details.

              Bugs: when doing TFTP uploads, you must return the exact amount of data that the  callback  wants,
              or it will be considered the final packet by the server end and the transfer will end there.

              If  you  set  this  callback  pointer  to  NULL, or don't set it at all, the default internal read
              function will be used. It is doing an fread() on the FILE * userdata set with CURLOPT_READDATA.

       CURLOPT_READDATA
              Data pointer to pass to the file read function. If you use the CURLOPT_READFUNCTION  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 * (cast to 'void *').

              If you're using libcurl as a win32 DLL, you MUST  use  a  CURLOPT_READFUNCTION  if  you  set  this
              option.

              This  option  was  also  known  by  the  older  name CURLOPT_INFILE, the name CURLOPT_READDATA was
              introduced in 7.9.7.

       CURLOPT_IOCTLFUNCTION
              Pass a pointer to a  function  that  matches  the  following  prototype:  curlioerr  function(CURL
              *handle,  int  cmd,  void  *clientp);. 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 HTTP PUT or POST with a multi-pass authentication method. By default, this parameter
              is set to NULL.  (Option added in 7.12.3).

              Use CURLOPT_SEEKFUNCTION  instead  to  provide  seeking!  If  CURLOPT_SEEKFUNCTION  is  set,  this
              parameter will be ignored when seeking.

       CURLOPT_IOCTLDATA
              Pass  a  pointer  that  will  be  untouched by libcurl and passed as the 3rd argument in the ioctl
              callback set with CURLOPT_IOCTLFUNCTION.  By default, the value of this parameter is  unspecified.
              (Option added in 7.12.3)

       CURLOPT_SEEKFUNCTION
              Pass  a  pointer  to a function that matches the following prototype: int function(void *instream,
              curl_off_t offset, int origin); This function gets called by libcurl to seek to a certain position
              in the input stream and can 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  HTTP  PUT or POST with a multi-pass authentication method. The function shall work
              like "fseek" or "lseek" and accepted SEEK_SET, SEEK_CUR  and  SEEK_END  as  argument  for  origin,
              although  libcurl currently only passes SEEK_SET. The callback must return 0 (CURL_SEEKFUNC_OK) on
              success,   1   (CURL_SEEKFUNC_FAIL)   to   cause   the   upload   operation   to   fail    or    2
              (CURL_SEEKFUNC_CANTSEEK)  to  indicate  that while the seek failed, libcurl is free to work around
              the problem if possible. The latter can sometimes be done by instead reading  from  the  input  or
              similar.

              By default, this parameter is unset.

              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 curl_off_t on many systems! (Option added in 7.18.0)

       CURLOPT_SEEKDATA
              Data pointer to pass to the file seek function. If you use the CURLOPT_SEEKFUNCTION  option,  this
              is  the pointer you'll get as input. If you don't specify a seek callback, NULL is passed. (Option
              added in 7.18.0)

       CURLOPT_SOCKOPTFUNCTION
              Pass a pointer to a function that matches the following  prototype:  int  function(void  *clientp,
              curl_socket_t  curlfd,  curlsocktype  purpose);. By default, this parameter is unset. If set, this
              function gets called by libcurl after the  socket()  call  but  before  the  connect()  call.  The
              callback's purpose argument identifies the exact purpose for this particular socket:

              CURLSOCKTYPE_IPCXN  for  actively  created connections or since 7.28.0 CURLSOCKTYPE_ACCEPT for FTP
              when the connection was setup with PORT/EPSV (in earlier versions these sockets weren't passed  to
              this callback).

              Future  versions  of  libcurl  may  support  more  purposes.  It  passes  the newly created socket
              descriptor so additional setsockopt() calls can be done at the user's discretion.  Return 0 (zero)
              from the callback on success. Return 1 from the callback function to signal an unrecoverable error
              to the library and it will close the socket and return CURLE_COULDNT_CONNECT.   (Option  added  in
              7.16.0)

              Added  in  7.21.5,  the  callback  function may return CURL_SOCKOPT_ALREADY_CONNECTED, which tells
              libcurl that the socket is in fact already connected and then libcurl will not attempt to  connect
              it.

       CURLOPT_SOCKOPTDATA
              Pass  a  pointer that will be untouched by libcurl and passed as the first argument in the sockopt
              callback set with CURLOPT_SOCKOPTFUNCTION.  The default value of this  parameter  is  unspecified.
              (Option added in 7.16.0)

       CURLOPT_OPENSOCKETFUNCTION
              Pass  a  pointer  to  a function that matches the following prototype: curl_socket_t function(void
              *clientp, curlsocktype purpose, struct curl_sockaddr *address);.  This  function  gets  called  by
              libcurl  instead  of  the  socket(2)  call.  The  callback's purpose argument identifies the exact
              purpose for this particular  socket:  CURLSOCKTYPE_IPCXN  is  for  IP  based  connections.  Future
              versions  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 CURL_SOCKET_BAD in case no connection could be established or  another
              error  was  detected.  Any  additional setsockopt(2) calls can be done on the socket at the user's
              discretion.  CURL_SOCKET_BAD return value from the callback function will signal an  unrecoverable
              error  to  the library and it will return CURLE_COULDNT_CONNECT.  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.)

       CURLOPT_OPENSOCKETDATA
              Pass a pointer that will be untouched  by  libcurl  and  passed  as  the  first  argument  in  the
              opensocket  callback  set with CURLOPT_OPENSOCKETFUNCTION.  The default value of this parameter is
              unspecified.  (Option added in 7.17.1.)

       CURLOPT_CLOSESOCKETFUNCTION
              Pass a pointer to a function that matches the following  prototype:  int  function(void  *clientp,
              curl_socket_t   item);.  This  function  gets  called  by  libcurl  instead  of  the  close(3)  or
              closesocket(3) call when sockets are closed (not for any other file descriptors). This  is  pretty
              much  the  reverse  to  the CURLOPT_OPENSOCKETFUNCTION option. Return 0 to signal success and 1 if
              there was an error.  (Option added in 7.21.7)

       CURLOPT_CLOSESOCKETDATA
              Pass a pointer that will be untouched  by  libcurl  and  passed  as  the  first  argument  in  the
              closesocket callback set with CURLOPT_CLOSESOCKETFUNCTION.  The default value of this parameter is
              unspecified.  (Option added in 7.21.7)

       CURLOPT_PROGRESSFUNCTION
              Pass a pointer to a function that matches the following prototype:

              int function(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow);

              This  function gets called by libcurl instead of its internal equivalent with a frequent interval.
              While data is being transferred it will be called very frequently, and during  slow  periods  like
              when nothing is being transferred it can slow down to about one call per second.

              clientp  is  the  pointer set with CURLOPT_PROGRESSDATA, it is not actually used by libcurl but is
              only passed along from the application to the callback.

              The callback gets told how much data libcurl will transfer  and  has  transferred,  in  number  of
              bytes. dltotal is the total number of bytes libcurl expects to download in this transfer. dlnow is
              the  number  of  bytes  downloaded so far. ultotal is the total number of bytes libcurl expects to
              upload in this transfer. ulnow is the number of bytes uploaded so far.

              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). Many times the callback will be called one or more
              times first, before it knows the data sizes so a program must be made to handle that.

              Returning a non-zero value from this callback will cause libcurl to abort the transfer and  return
              CURLE_ABORTED_BY_CALLBACK.

              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.

              CURLOPT_NOPROGRESS must be set to 0 to make this function actually get called.

       CURLOPT_XFERINFOFUNCTION
              Pass a pointer to a function that matches the following prototype:

              int function(void *clientp, curl_off_t dltotal, curl_off_t dlnow,
                              curl_off_t ultotal, curl_off_t ulnow);

              This function gets called by libcurl instead of its internal equivalent with a frequent  interval.
              While  data  is  being transferred it will be called very frequently, and during slow periods like
              when nothing is being transferred it can slow down to about one call per second.

              clientp is the pointer set with CURLOPT_XFERINFODATA, it is only passed along from the application
              to the callback.

              The callback gets told how much data libcurl will transfer  and  has  transferred,  in  number  of
              bytes. dltotal is the total number of bytes libcurl expects to download in this transfer. dlnow is
              the  number  of  bytes  downloaded so far. ultotal is the total number of bytes libcurl expects to
              upload in this transfer. ulnow is the number of bytes uploaded so far.

              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). Many times the callback will be called one or more
              times first, before it knows the data sizes so a program must be made to handle that.

              Returning a non-zero value from this callback will cause libcurl to abort the transfer and  return
              CURLE_ABORTED_BY_CALLBACK.

              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.

              CURLOPT_NOPROGRESS must be set to 0 to make this function actually get called.

              (Added in 7.32.0)

       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.  The default value of this parameter is unspecified.

       CURLOPT_XFERINFODATA
              Pass  a pointer that will be untouched by libcurl and passed as the first argument in the progress
              callback set with CURLOPT_XFERINFOFUNCTION.  The default value of this parameter  is  unspecified.
              This option is an alias for CURLOPT_PROGRESSDATA. (Added in 7.32.0)

       CURLOPT_HEADERFUNCTION
              Pass  a  pointer  to  a function that matches the following prototype: size_t function( void *ptr,
              size_t size, size_t nmemb, void *userdata);. 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 callback. Parsing headers is very easy using this.  The
              size  of  the  data pointed to by ptr is size multiplied with nmemb. Do not assume that the header
              line  is  zero  terminated!  The  pointer  named  userdata  is  the   one   you   set   with   the
              CURLOPT_WRITEHEADER  option.  The callback function must 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. This will abort the transfer and return CURL_WRITE_ERROR.

              A  complete  HTTP  header that is passed to this function can be up to CURL_MAX_HTTP_HEADER (100K)
              bytes.

              If this option is not set, or if it is set to NULL, but  CURLOPT_HEADERDATA  (CURLOPT_WRITEHEADER)
              is  set to anything but NULL, the function used to accept response data will be used instead. That
              is, it will be the function specified with CURLOPT_WRITEFUNCTION, or if it  is  not  specified  or
              NULL - the default, stream-writing function.

              It's important to note that the callback will be invoked for the headers of all responses received
              after  initiating  a  request  and  not just the final response. This includes all responses which
              occur during authentication negotiation. If you need to operate on only the headers from the final
              response, you will need to collect headers in the callback yourself and use HTTP status lines, for
              example, to delimit response boundaries.

              When a server sends a chunked encoded  transfer,  it  may  contain  a  trailer.  That  trailer  is
              identical to a HTTP 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  regular  response-headers  mention  what  header(s) to expect in the
              trailer.

              For non-HTTP protocols like FTP, POP3, IMAP and SMTP this function will get called with the server
              responses to the commands that libcurl sends.

       CURLOPT_WRITEHEADER
              (This option is also known as CURLOPT_HEADERDATA) Pass a pointer to be used to  write  the  header
              part  of the received data to. If you don't use CURLOPT_WRITEFUNCTION or CURLOPT_HEADERFUNCTION to
              take care of the writing, this must be a valid FILE * as the internal default will then be a plain
              fwrite(). See also the CURLOPT_HEADERFUNCTION option above on how to set a custom  get-all-headers
              callback.

       CURLOPT_DEBUGFUNCTION
              Pass  a  pointer to a function that matches the following prototype: int curl_debug_callback (CURL
              *, curl_infotype, char *, size_t, void  *);  CURLOPT_DEBUGFUNCTION  replaces  the  standard  debug
              function  used  when  CURLOPT_VERBOSE   is in effect. This callback receives debug information, as
              specified with the curl_infotype argument. This function must return 0.  The data  pointed  to  by
              the char * passed to this function WILL NOT be zero terminated, but will be exactly of the size as
              told by the size_t argument.

              Available curl_infotype values:

              CURLINFO_TEXT
                     The data is informational text.

              CURLINFO_HEADER_IN
                     The data is header (or header-like) data received from the peer.

              CURLINFO_HEADER_OUT
                     The data is header (or header-like) data sent to the peer.

              CURLINFO_DATA_IN
                     The data is protocol data received from the peer.

              CURLINFO_DATA_OUT
                     The data is protocol data sent to the peer.

       CURLOPT_DEBUGDATA
              Pass  a  pointer  to  whatever you want passed in to your CURLOPT_DEBUGFUNCTION in the last void *
              argument. This pointer is not used by libcurl, it is only passed to the callback.

       CURLOPT_SSL_CTX_FUNCTION
              This option does only function for libcurl powered  by  OpenSSL.  If  libcurl  was  built  against
              another SSL library, this functionality is absent.

              Pass  a pointer to a function that matches the following prototype: CURLcode sslctxfun(CURL *curl,
              void *sslctx, void *parm); This function gets called by libcurl just before the initialization  of
              a  SSL connection after having processed all other SSL 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  SSL_CTX.  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 argument with the CURLOPT_SSL_CTX_DATA option. This option was introduced
              in 7.11.0.

              This function will get called on all new connections made to a server, during the SSL negotiation.
              The SSL_CTX 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 even to change the actual URI of a HTTPS request (example used in the lib509
              test case).  See also the example section for a replacement of the key, certificate and trust file
              settings.

       CURLOPT_SSL_CTX_DATA
              Data pointer to pass to the ssl context callback set by the option CURLOPT_SSL_CTX_FUNCTION,  this
              is the pointer you'll get as third parameter, otherwise NULL. (Added in 7.11.0)

       CURLOPT_CONV_TO_NETWORK_FUNCTION

       CURLOPT_CONV_FROM_NETWORK_FUNCTION

       CURLOPT_CONV_FROM_UTF8_FUNCTION
              Pass  a  pointer  to a function that matches the following prototype: CURLcode function(char *ptr,
              size_t length);

              These  three  options  apply  to  non-ASCII  platforms  only.   They   are   available   only   if
              CURL_DOES_CONVERSIONS   was   defined   when   libcurl   was   built.   When  this  is  the  case,
              curl_version_info(3) will return the CURL_VERSION_CONV 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.  CURLE_OK should be returned upon  successful  conversion.
              A  CURLcode  return  value  defined by curl.h, such as CURLE_CONV_FAILED, should be returned if an
              error was encountered.

              CURLOPT_CONV_TO_NETWORK_FUNCTION and CURLOPT_CONV_FROM_NETWORK_FUNCTION convert between  the  host
              encoding  and  the  network encoding.  They are used when commands or ASCII data are sent/received
              over the network.

              CURLOPT_CONV_FROM_UTF8_FUNCTION is called to convert from UTF8 into  the  host  encoding.   It  is
              required only for SSL processing.

              If  you  set  a  callback  pointer  to  NULL,  or  don't set it at all, the built-in libcurl iconv
              functions will be used.  If HAVE_ICONV was not defined when libcurl was built, and no callback has
              been established, conversion will return the CURLE_CONV_REQD error code.

              If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined.  For example:

               #define CURL_ICONV_CODESET_OF_HOST "IBM-1047"

              The iconv code in libcurl will default the network and UTF8 codeset names as follows:

               #define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"

               #define CURL_ICONV_CODESET_FOR_UTF8   "UTF-8"

              You will need to override these definitions if they are different on your system.

       CURLOPT_INTERLEAVEFUNCTION
              Pass a pointer to a function that matches the following prototype:  size_t  function(  void  *ptr,
              size_t size, size_t nmemb, void *userdata). This function gets called by libcurl as soon as it has
              received  interleaved  RTP data. This function gets called for each $ block and therefore contains
              exactly one upper-layer protocol unit (e.g.  one RTP packet). Curl writes the  interleaved  header
              as  well  as  the  included data for each call. The first byte is always an ASCII dollar sign. The
              dollar sign is followed by a one byte channel identifier and then  a  2  byte  integer  length  in
              network  byte  order.  See  RFC2326  Section  10.12  for  more information on how RTP interleaving
              behaves. If unset or set to NULL, curl will use the default write function.

              Interleaved RTP poses some challenges for the client application. Since the stream data is sharing
              the RTSP control connection, it is critical to service the RTP in a timely  fashion.  If  the  RTP
              data  is  not  handled quickly, subsequent response processing may become unreasonably delayed and
              the connection may close. The application may use CURL_RTSPREQ_RECEIVE to service RTP data when no
              requests are desired. If the application makes a  request,  (e.g.   CURL_RTSPREQ_PAUSE)  then  the
              response handler will process any pending RTP data before marking the request as finished.  (Added
              in 7.20.0)

       CURLOPT_INTERLEAVEDATA
              This  is  the  userdata pointer that will be passed to CURLOPT_INTERLEAVEFUNCTION when interleaved
              RTP data is received. (Added in 7.20.0)

       CURLOPT_CHUNK_BGN_FUNCTION
              Pass a pointer to a function that matches the  following  prototype:  long  function  (const  void
              *transfer_info, void *ptr, int remains). This function gets called by libcurl before a part of the
              stream is going to be transferred (if the transfer supports chunks).

              This callback makes sense only when using the CURLOPT_WILDCARDMATCH option for now.

              The  target  of  transfer_info  parameter  is a "feature depended" structure. For the FTP wildcard
              download, the target is curl_fileinfo structure (see curl/curl.h).  The parameter ptr is a pointer
              given by CURLOPT_CHUNK_DATA. The parameter remains contains number of  chunks  remaining  per  the
              transfer. If the feature is not available, the parameter has zero value.

              Return  CURL_CHUNK_BGN_FUNC_OK if everything is fine, CURL_CHUNK_BGN_FUNC_SKIP if you want to skip
              the concrete chunk or CURL_CHUNK_BGN_FUNC_FAIL to tell libcurl to stop  if  some  error  occurred.
              (This was added in 7.21.0)

       CURLOPT_CHUNK_END_FUNCTION
              Pass  a pointer to a function that matches the following prototype: long function(void *ptr). This
              function gets called by libcurl as soon as a part of the stream has been transferred (or skipped).

              Return CURL_CHUNK_END_FUNC_OK if everything is fine or CURL_CHUNK_END_FUNC_FAIL to tell the lib to
              stop if some error occurred.  (This was added in 7.21.0)

       CURLOPT_CHUNK_DATA
              Pass a pointer that will  be  untouched  by  libcurl  and  passed  as  the  ptr  argument  to  the
              CURL_CHUNK_BGN_FUNTION and CURL_CHUNK_END_FUNTION.  (This was added in 7.21.0)

       CURLOPT_FNMATCH_FUNCTION
              Pass  a  pointer to a function that matches the following prototype: int function(void *ptr, const
              char *pattern, const char *string) prototype (see curl/curl.h). It  is  used  internally  for  the
              wildcard matching feature.

              Return  CURL_FNMATCHFUNC_MATCH  if  pattern matches the string, CURL_FNMATCHFUNC_NOMATCH if not or
              CURL_FNMATCHFUNC_FAIL if an error occurred.  (This was added in 7.21.0)

       CURLOPT_FNMATCH_DATA
              Pass a pointer that will  be  untouched  by  libcurl  and  passed  as  the  ptr  argument  to  the
              CURL_FNMATCH_FUNCTION. (This was added in 7.21.0)

ERROR OPTIONS

       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  curl_easy_perform. The buffer must be at least
              CURL_ERROR_SIZE 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 must
              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 curl_easy_cleanup(3)
              or you set the same option again to use a different pointer.

              Use CURLOPT_VERBOSE and CURLOPT_DEBUGFUNCTION 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.

       CURLOPT_STDERR
              Pass  a  FILE  *  as parameter. Tell libcurl to use this stream instead of stderr when showing the
              progress meter and displaying CURLOPT_VERBOSE data.

       CURLOPT_FAILONERROR
              A parameter set to 1 tells the library to fail silently if the HTTP 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).

              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

       CURLOPT_URL
              Pass  in  a  pointer  to  the  actual URL to deal with. The parameter should be a char * to a zero
              terminated string which must be URL-encoded in the following format:

              scheme://host:port/path

              For a greater explanation of the format please see RFC3986.

              If the given URL lacks the scheme (such as "http://" or "ftp://" etc) then libcurl will attempt to
              resolve the protocol based on one of the following given host names:

              HTTP, FTP, DICT, LDAP, IMAP, POP3 or SMTP

              (POP3 and SMTP added in 7.31.0)

              Should the protocol, either that specified by the scheme or deduced by libcurl from the host name,
              not be supported by libcurl then (CURLE_UNSUPPORTED_PROTOCOL) will be  returned  from  either  the
              curl_easy_perform(3)    or    curl_multi_perform(3)    functions   when   you   call   them.   Use
              curl_version_info(3) for detailed information of which protocols are supported  by  the  build  of
              libcurl you are using.

              The  host part of the URL contains the address of the server that you want to connect to. This can
              be the fully qualified domain name of the server, the local network name of the  machine  on  your
              network  or the IP address of the server or machine represented by either an IPv4 or IPv6 address.
              For example:

              http://www.example.com/

              http://hostname/

              http://192.168.0.1/

              http://[2001:1890:1112:1::20]/

              It is also possible to specify the user name, password and any supported login options as part  of
              the host, for the following protocols, when connecting to servers that require authentication:

              http://user:password@www.example.com

              ftp://user:password@ftp.example.com

              imap://user:password;options@mail.example.com

              pop3://user:password;options@mail.example.com

              smtp://user:password;options@mail.example.com

              At  present  only  IMAP,  POP3  and  SMTP  support  login  options  as part of the host.  For more
              information about the login options in URL syntax please  see  RFC2384,  RFC5092  and  IETF  draft
              draft-earhart-url-smtp-00.txt (Added in 7.31.0).

              The  port  is  optional  and  when  not  specified  libcurl will use the default port based on the
              determined or specified protocol: 80 for HTTP, 21 for FTP and 25  for  SMTP,  etc.  The  following
              examples show how to specify the port:

              http://www.example.com:8080/ - This will connect to a web server using port 8080 rather than 80.

              smtp://mail.example.com:587/ - This will connect to a SMTP server on the alternative mail port.

              The  path  part of the URL is protocol specific and whilst some examples are given below this list
              is not conclusive:

              HTTP

              The path part of a HTTP request specifies the file to retrieve and from  what  directory.  If  the
              directory  is  not  specified then the web server's root directory is used. If the file is omitted
              then the default document will be retrieved  for  either  the  directory  specified  or  the  root
              directory.  The  exact  resource  returned  for  each  URL  is  entirely dependent on the server's
              configuration.

              http://www.example.com - This gets the main page from the web server.

              http://www.example.com/index.html - This returns the main page by explicitly requesting it.

              http://www.example.com/contactus/  -  This  returns  the  default  document  from  the   contactus
              directory.

              FTP

              The  path  part  of  an FTP request specifies the file to retrieve and from what directory. If the
              file part is omitted then libcurl downloads the directory listing for the directory specified.  If
              the  directory  is  omitted  then  the  directory  listing  for  the root / home directory will be
              returned.

              ftp://ftp.example.com - This retrieves the directory listing for the root directory.

              ftp://ftp.example.com/readme.txt - This downloads the file readme.txt from the root directory.

              ftp://ftp.example.com/libcurl/readme.txt - This downloads readme.txt from the libcurl directory.

              ftp://user:password@ftp.example.com/readme.txt - This  retrieves  the  readme.txt  file  from  the
              user's  home directory. When a username and password is specified, everything that is specified in
              the path part is relative to the user's home directory. To retrieve files from the root  directory
              or  a  directory  underneath  the  root  directory  then  the  absolute  path must be specified by
              prepending an additional forward slash to the beginning of the path.

              ftp://user:password@ftp.example.com//readme.txt - This retrieves  the  readme.txt  from  the  root
              directory when logging in as a specified user.

              SMTP

              The  path  part of a SMTP request specifies the host name to present during communication with the
              mail server. If the path is omitted then libcurl will attempt to resolve the local computer's host
              name. However, this may not return the fully qualified domain name that is required by  some  mail
              servers  and  specifying  this  path allows you to set an alternative name, such as your machine's
              fully qualified domain name, which you might have obtained  from  an  external  function  such  as
              gethostname or getaddrinfo.

              smtp://mail.example.com  -  This  connects  to the mail server at example.com and sends your local
              computer's host name in the HELO / EHLO command.

              smtp://mail.example.com/client.example.com - This will send client.example.com in the HELO /  EHLO
              command to the mail server at example.com.

              POP3

              The  path  part of a POP3 request specifies the message ID to retrieve. If the ID is not specified
              then a list of waiting messages is returned instead.

              pop3://user:password@mail.example.com - This lists the available messages for the user

              pop3://user:password@mail.example.com/1 - This retrieves the first message for the user

              IMAP

              The path part of an IMAP request not only specifies the mailbox  to  list  (Added  in  7.30.0)  or
              select,  but  can  also be used to check the UIDVALIDITY of the mailbox and to specify the UID and
              SECTION of the message to fetch (Added in 7.30.0).

              imap://user:password@mail.example.com - Performs a top level folder list

              imap://user:password@mail.example.com/INBOX - Performs a folder list on the user's inbox

              imap://user:password@mail.example.com/INBOX/;UID=1 - Selects the user's inbox and fetches  message
              1

              imap://user:password@mail.example.com/INBOX;UIDVALIDITY=50/;UID=2  -  Selects  the  user's  inbox,
              checks the UIDVALIDITY of the mailbox is 50 and fetches message 2 if it is

              imap://user:password@mail.example.com/INBOX/;UID=3/;SECTION=TEXT - Selects the  user's  inbox  and
              fetches message 3 with only the text portion of the message

              For more information about the individual components of an IMAP URL please see RFC5092.

              SCP

              The  path  part  of a SCP request specifies the file to retrieve and from what directory. The file
              part may not be omitted. The file is taken as an absolute path from  the  root  directory  on  the
              server.  To  specify a path relative to the user's home directory on the server, prepend ~/ to the
              path portion.  If the user name is not embedded in the URL, it can be set with the CURLOPT_USERPWD
              or CURLOPT_USERNAME option.

              scp://user@example.com/etc/issue - This specifies the file /etc/issue

              scp://example.com/~/my-file - This specifies the file my-file in the user's home directory on  the
              server

              SFTP

              The  path  part  of  a SFTP request specifies the file to retrieve and from what directory. If the
              file part is omitted then libcurl downloads the directory listing for the directory specified.  If
              the path ends in a / then a directory listing is returned instead of  a  file.   If  the  path  is
              omitted  entirely  then  the directory listing for the root / home directory will be returned.  If
              the user  name  is  not  embedded  in  the  URL,  it  can  be  set  with  the  CURLOPT_USERPWD  or
              CURLOPT_USERNAME option.

              sftp://user:password@example.com/etc/issue - This specifies the file /etc/issue

              sftp://user@example.com/~/my-file - This specifies the file my-file in the user's home directory

              sftp://ssh.example.com/~/Documents/ - This requests a directory listing of the Documents directory
              under the user's home directory

              LDAP

              The path part of a LDAP request can be used to specify the: Distinguished Name, Attributes, Scope,
              Filter  and  Extension for a LDAP search. Each field is separated by a question mark and when that
              field is not required an empty string with the question mark separator should be included.

              ldap://ldap.example.com/o=My%20Organisation - This will perform a LDAP search with the  DN  as  My
              Organisation.

              ldap://ldap.example.com/o=My%20Organisation?postalAddress  - This will perform the same search but
              will only return postalAddress attributes.

              ldap://ldap.example.com/?rootDomainNamingContext  -  This  specifies  an  empty  DN  and  requests
              information about the rootDomainNamingContext attribute for an Active Directory server.

              For more information about the individual components of a LDAP URL please see RFC4516.

              RTMP

              There's  no  official URL spec for RTMP so libcurl uses the URL syntax supported by the underlying
              librtmp library. It has a syntax where it wants a traditional URL,  followed  by  a  space  and  a
              series of space-separated name=value pairs.

              While  space is not typically a "legal" letter, libcurl accepts them. When a user wants to pass in
              a '#' (hash) character it will be treated as a fragment and get cut off  by  libcurl  if  provided
              literally.  You will instead have to escape it by providing it as backslash and its ASCII value in
              hexadecimal: "\23".

              NOTES

              Starting with version 7.20.0, the fragment part of the URI will not be sent as part of  the  path,
              which was previously the case.

              CURLOPT_URL is the only option that must be set before curl_easy_perform(3) is called.

              CURLOPT_PROTOCOLS  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 useful if you accept the URL
              from an external source and want to limit the accessibility.

       CURLOPT_PROTOCOLS
              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 protocols 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 CURLOPT_REDIR_PROTOCOLS.
              (Added in 7.19.4)

       CURLOPT_REDIR_PROTOCOLS
              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
              CURLOPT_FOLLOWLOCATION 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)

       CURLOPT_PROXY
              Set HTTP 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.  CURLOPT_PROXYPORT.

              When you tell the library to use a HTTP proxy, libcurl will transparently  convert  operations  to
              HTTP  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 CURLOPT_QUOTE and similar FTP specifics that don't  work  unless  you
              tunnel through the HTTP proxy. Such tunneling is activated with CURLOPT_HTTPPROXYTUNNEL.

              libcurl  respects  the environment variables http_proxy, ftp_proxy, all_proxy etc, if any of those
              are set. The CURLOPT_PROXY 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 environment variables can be specified the exact same
              way  as  the  proxy  can be set with CURLOPT_PROXY, include protocol prefix (http://) and embedded
              user + password.

              Since 7.21.7, the proxy string may be specified with a protocol:// prefix to  specify  alternative
              proxy protocols. Use socks4://, socks4a://, socks5:// or socks5h:// (the last one to enable socks5
              and asking the proxy to do the resolving, also known as CURLPROXY_SOCKS5_HOSTNAME type) to request
              the  specific  SOCKS  version  to  be  used. No protocol specified, http:// and all others will be
              treated as HTTP proxies.

       CURLOPT_PROXYPORT
              Pass a long with this option to set the proxy port to connect to unless it  is  specified  in  the
              proxy string CURLOPT_PROXY.

       CURLOPT_PROXYTYPE
              Pass  a  long  with  this  option  to  set  type  of  the  proxy.  Available  options for this are
              CURLPROXY_HTTP,  CURLPROXY_HTTP_1_0  (added  in  7.19.4),  CURLPROXY_SOCKS4   (added   in   7.10),
              CURLPROXY_SOCKS5,  CURLPROXY_SOCKS4A  (added  in  7.18.0)  and CURLPROXY_SOCKS5_HOSTNAME (added in
              7.18.0). The HTTP type is default. (Added in 7.10)

              If you set CURLOPT_PROXYTYPE to CURLPROXY_HTTP_1_0, it will only affect how libcurl  speaks  to  a
              proxy  when  CONNECT  is  used.  The  HTTP  version  used  for  "regular" HTTP requests is instead
              controlled with CURLOPT_HTTP_VERSION.

       CURLOPT_NOPROXY
              Pass a pointer to a zero terminated string. The string consists of a comma separated list of  host
              names  that  do  not  require a proxy to get reached, even if one is specified.  The only wildcard
              available is a single * character, which matches all hosts, and effectively  disables  the  proxy.
              Each  name in this list is matched as either a domain which contains the hostname, or the hostname
              itself. For example, example.com would match example.com, example.com:80, and www.example.com, but
              not www.notanexample.com.  (Added in 7.19.4)

       CURLOPT_HTTPPROXYTUNNEL
              Set the parameter to 1 to make the library tunnel all operations through a given HTTP 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.

       CURLOPT_SOCKS5_GSSAPI_SERVICE
              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)

       CURLOPT_SOCKS5_GSSAPI_NEC
              Pass a long set to 1 to enable or 0 to disable. As part of the  gssapi  negotiation  a  protection
              mode  is  negotiated.  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).

       CURLOPT_INTERFACE
              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.

              Starting with 7.24.0: If the parameter starts with "if!" then it is treated as only  as  interface
              name and no attempt will ever be named to do treat it as an IP address or to do name resolution on
              it.   If  the  parameter  starts with "host!" it is treated as either an IP address or a hostname.
              Hostnames are resolved synchronously.  Using the if! format is highly recommended when  using  the
              multi  interfaces  to  avoid  allowing the code to block.  If "if!" is specified but the parameter
              does not match an existing interface, CURLE_INTERFACE_FAILED is returned.

       CURLOPT_LOCALPORT
              Pass a long. This sets the local port number of the socket used for connection. This can  be  used
              in  combination  with  CURLOPT_INTERFACE  and you are recommended to use CURLOPT_LOCALPORTRANGE as
              well when this is set. Valid port numbers are 1 - 65535. (Added in 7.15.2)

       CURLOPT_LOCALPORTRANGE
              Pass a long. This is the number of attempts libcurl will make to find a working local port number.
              It starts with the given CURLOPT_LOCALPORT 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. Port numbers by  nature
              are  scarce  resources that will be busy at times so setting this value to something too low might
              cause unnecessary connection setup failures. (Added in 7.15.2)

       CURLOPT_DNS_CACHE_TIMEOUT
              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.

              The name resolve functions of various libc implementations don't re-read name  server  information
              unless  explicitly  told  so (for example, by calling res_init(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.

       CURLOPT_DNS_USE_GLOBAL_CACHE
              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 CURLOPT_SHARE and curl_share_init(3).

       CURLOPT_BUFFERSIZE
              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 (CURL_MAX_WRITE_SIZE), so it only makes sense to
              use this option if you want it smaller.

       CURLOPT_PORT
              Pass a long specifying what remote port number to connect to, instead of the one specified in  the
              URL or the default port for the used protocol.

       CURLOPT_TCP_NODELAY
              Pass  a  long  specifying  whether  the  TCP_NODELAY  option is to 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 Segment Size (MSS) for the network).

              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 network if overdone.

       CURLOPT_ADDRESS_SCOPE
              Pass a long specifying the scope_id value to use when connecting to IPv6 link-local or  site-local
              addresses. (Added in 7.19.0)

       CURLOPT_TCP_KEEPALIVE
              Pass  a  long.  If  set  to 1, TCP keepalive probes will be sent. The delay and frequency of these
              probes can be controlled by the CURLOPT_TCP_KEEPIDLE and CURLOPT_TCP_KEEPINTVL  options,  provided
              the operating system supports them. Set to 0 (default behavior) to disable keepalive probes (Added
              in 7.25.0).

       CURLOPT_TCP_KEEPIDLE
              Pass  a long. Sets the delay, in seconds, that the operating system will wait while the connection
              is idle before sending keepalive probes. Not all operating systems support this option. (Added  in
              7.25.0)

       CURLOPT_TCP_KEEPINTVL
              Pass  a  long.  Sets the interval, in seconds, that the operating system will wait between sending
              keepalive probes. Not all operating systems support this option. (Added in 7.25.0)

NAMES and PASSWORDS OPTIONS (Authentication)

       CURLOPT_NETRC
              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 CURLOPT_URL.

              libcurl uses a user name (and supplied or prompted  password)  supplied  with  CURLOPT_USERPWD  in
              preference to any of the options controlled by this parameter.

              Pass a long, set to one of the values described below.

              CURL_NETRC_OPTIONAL
                     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 specified in the URL.

                     Undefined values of the option will have this effect.

              CURL_NETRC_IGNORED
                     The library will ignore the file and use only the information in the URL.

                     This is the default.

              CURL_NETRC_REQUIRED
                     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 properties set (as the standard Unix ftp client
       does). It should only be readable by user.

       CURLOPT_NETRC_FILE
              Pass a char * as parameter, pointing to a zero terminated string containing the full path name  to
              the  file  you want libcurl to use as .netrc file. If this option is omitted, and CURLOPT_NETRC is
              set, libcurl will attempt to find a .netrc file in the current user's home  directory.  (Added  in
              7.10.9)

       CURLOPT_USERPWD
              Pass a char * as parameter, pointing to a zero terminated login details string for the connection.
              The format of which is: [user name]:[password].

              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  HTTP  servers  (on  Windows)  support  this  style  even  for Basic
              authentication.

              When using HTTP and CURLOPT_FOLLOWLOCATION, 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 CURLOPT_UNRESTRICTED_AUTH is set), so if libcurl  follows  locations  to
              other  hosts  it  will  not  send  the  user  and  password  to those. This is enforced to prevent
              accidental information leakage.

              Use  CURLOPT_HTTPAUTH  to  specify  the  authentication  method  for  HTTP  based  connections  or
              CURLOPT_LOGIN_OPTIONS to control IMAP, POP3 and SMTP options.

              The  user  and  password  strings  are  not  URL decoded, so there's no way to send in a user name
              containing a colon using this option. Use CURLOPT_USERNAME for that, or include it in the URL.

       CURLOPT_PROXYUSERPWD
              Pass a char * as parameter, which should be [user name]:[password] to use for  the  connection  to
              the  HTTP  proxy. Both the name and the password will be URL decoded before use, so to include for
              example a colon in the user name you should encode it as %3A.

              Use CURLOPT_PROXYAUTH to specify the authentication method.

       CURLOPT_USERNAME
              Pass a char * as parameter, which should be pointing to the zero terminated user name to  use  for
              the transfer.

              CURLOPT_USERNAME sets the user name to be used in protocol authentication. You should not use this
              option together with the (older) CURLOPT_USERPWD option.

              To  specify the password and login options, along with the user name, use the CURLOPT_PASSWORD and
              CURLOPT_LOGIN_OPTIONS options. (Added in 7.19.1)

       CURLOPT_PASSWORD
              Pass a char * as parameter, which should be pointing to the zero terminated password  to  use  for
              the transfer.

              The CURLOPT_PASSWORD option should be used in conjunction with the CURLOPT_USERNAME option. (Added
              in 7.19.1)

       CURLOPT_LOGIN_OPTIONS
              (Added  in  7.34.0)  Pass  a  char * as parameter, which should be pointing to the zero terminated
              options string to use for the transfer.

              At present only IMAP, POP3 and SMTP support login options. For more information  about  the  login
              options please see RFC2384, RFC5092 and IETF draft draft-earhart-url-smtp-00.txt

              CURLOPT_LOGIN_OPTIONS  can  be  used to set protocol specific login options, such as the preferred
              authentication mechanism via "AUTH=NTLM" or "AUTH=*", and should be used in conjunction  with  the
              CURLOPT_USERNAME option.

       CURLOPT_PROXYUSERNAME
              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 CURLOPT_PROXYUSERNAME option should be used in same way as the CURLOPT_PROXYUSERPWD  is  used.
              In  comparison  to CURLOPT_PROXYUSERPWD the CURLOPT_PROXYUSERNAME allows the username to contain a
              colon, like in the following example: "sip:user@example.com". The CURLOPT_PROXYUSERNAME option  is
              an  alternative way to set the user name while connecting to Proxy.  There is no meaning to use it
              together with the CURLOPT_PROXYUSERPWD option.

              In order to specify  the  password  to  be  used  in  conjunction  with  the  user  name  use  the
              CURLOPT_PROXYPASSWORD option.  (Added in 7.19.1)

       CURLOPT_PROXYPASSWORD
              Pass  a  char  * as parameter, which should be pointing to the zero terminated password to use for
              the transfer while connecting to Proxy.

              The CURLOPT_PROXYPASSWORD option should be used  in  conjunction  with  the  CURLOPT_PROXYUSERNAME
              option. (Added in 7.19.1)

       CURLOPT_HTTPAUTH
              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 CURLOPT_USERPWD option or with the CURLOPT_USERNAME and
              the CURLOPT_PASSWORD options.  (Added in 7.10.6)

              CURLAUTH_BASIC
                     HTTP 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.

              CURLAUTH_DIGEST
                     HTTP  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.

              CURLAUTH_DIGEST_IE
                     HTTP  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)

              CURLAUTH_GSSNEGOTIATE
                     HTTP  GSS-Negotiate  authentication.  The  GSS-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 GSS-API library for this to work.

              CURLAUTH_NTLM
                     HTTP  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
                     eavesdropped.

                     You  need  to  build  libcurl with either OpenSSL, GnuTLS or NSS support for this option to
                     work, or build libcurl on Windows with SSPI support.

              CURLAUTH_NTLM_WB
                     NTLM delegating to winbind  helper.  Authentication  is  performed  by  a  separate  binary
                     application  that  is  executed  when  needed.  The name of the application is specified at
                     compile time but is typically /usr/bin/ntlm_auth (Added in 7.22.0)

                     Note that libcurl will fork when necessary to run the winbind application and kill it  when
                     complete,  calling  waitpid()  to  await  its  exit  when done. On POSIX operating systems,
                     killing the process will cause a  SIGCHLD  signal  to  be  raised  (regardless  of  whether
                     CURLOPT_NOSIGNAL  is  set),  which  must  be  handled  intelligently by the application. In
                     particular, the application must not unconditionally call  wait()  in  its  SIGCHLD  signal
                     handler  to avoid being subject to a race condition.  This behavior is subject to change in
                     future versions of libcurl.

              CURLAUTH_ANY
                     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.

              CURLAUTH_ANYSAFE
                     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.

              CURLAUTH_ONLY
                     This  is  a  meta symbol. Or this value together with a single specific auth value to force
                     libcurl to probe for un-restricted auth and if not, only  that  single  auth  algorithm  is
                     acceptable. (Added in 7.21.3)

       CURLOPT_TLSAUTH_TYPE
              Pass  a  long  as  parameter,  which  is  set  to  a bitmask, to tell libcurl which authentication
              method(s) you want it to use for TLS authentication.

              CURLOPT_TLSAUTH_SRP
                     TLS-SRP authentication. Secure Remote Password authentication for TLS is defined in RFC5054
                     and provides mutual authentication if both sides have a shared secret. To use TLS-SRP,  you
                     must also set the CURLOPT_TLSAUTH_USERNAME and CURLOPT_TLSAUTH_PASSWORD options.

                     You  need  to  build  libcurl with GnuTLS or OpenSSL with TLS-SRP support for this to work.
                     (Added in 7.21.4)

       CURLOPT_TLSAUTH_USERNAME
              Pass a char * as parameter, which should point to the zero terminated username to use for the  TLS
              authentication   method   specified  with  the  CURLOPT_TLSAUTH_TYPE  option.  Requires  that  the
              CURLOPT_TLS_PASSWORD option also be set. (Added in 7.21.4)

       CURLOPT_TLSAUTH_PASSWORD
              Pass a char * as parameter, which should point to the zero terminated password to use for the  TLS
              authentication   method   specified  with  the  CURLOPT_TLSAUTH_TYPE  option.  Requires  that  the
              CURLOPT_TLS_USERNAME option also be set. (Added in 7.21.4)

       CURLOPT_PROXYAUTH
              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 CURLOPT_PROXYUSERPWD option. The bitmask can be  constructed  by
              or'ing together the bits listed above for the CURLOPT_HTTPAUTH option. CURLOPT_PROXYAUTH was added
              in 7.10.7

       CURLOPT_SASL_IR
              Pass  a  long.  If  the value is 1, curl will send the initial response to the server in the first
              authentication packet in order to reduce the number of ping  pong  requests.  Only  applicable  to
              supporting  SASL  authentication  mechanisms  and  to the IMAP, POP3 and SMTP protocols. (Added in
              7.31.0)

              Note: Whilst IMAP supports this option there is no need to  explicitly  set  it,  as  libcurl  can
              determine the feature itself when the server supports the SASL-IR CAPABILITY.

       CURLOPT_XOAUTH2_BEARER
              Pass  a  char  *  as  parameter, which should point to the zero terminated OAuth 2.0 Bearer Access
              Token for use with IMAP, POP3 and SMTP servers that support the OAuth 2.0 Authorization Framework.
              (Added in 7.33.0)

              Note: The user name used to generate the Bearer Token should be supplied via the  CURLOPT_USERNAME
              option.

HTTP OPTIONS

       CURLOPT_AUTOREFERER
              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.

       CURLOPT_ACCEPT_ENCODING
              Sets the contents of the Accept-Encoding: header sent in a HTTP 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-NULL  value)  or  else any unsolicited encoding done by the server is ignored. See the special
              file lib/README.encoding for details.

              (This option was called CURLOPT_ENCODING before 7.21.6)

       CURLOPT_TRANSFER_ENCODING
              Adds a request for compressed Transfer Encoding in  the  outgoing  HTTP  request.  If  the  server
              supports  this  and  so  desires,  it  can  respond with the HTTP response sent using a compressed
              Transfer-Encoding that will be automatically uncompressed by libcurl on reception.

              Transfer-Encoding   differs   slightly   from   the   Content-Encoding   you    ask    for    with
              CURLOPT_ACCEPT_ENCODING  in  that a Transfer-Encoding is strictly meant to be for the transfer and
              thus MUST be decoded before the data arrives in the client. Traditionally,  Transfer-Encoding  has
              been much less used and supported by both HTTP clients and HTTP servers.

              (Added in 7.21.6)

       CURLOPT_FOLLOWLOCATION
              A  parameter  set  to  1 tells the library to follow any Location: header that the server sends as
              part of a HTTP 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. CURLOPT_MAXREDIRS can be
              used to limit the number of redirects libcurl will follow.

              Since 7.19.4, libcurl can  limit  what  protocols  it  will  automatically  follow.  The  accepted
              protocols are set with CURLOPT_REDIR_PROTOCOLS and it excludes the FILE protocol by default.

       CURLOPT_UNRESTRICTED_AUTH
              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
              CURLOPT_FOLLOWLOCATION.

       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 (CURLE_TOO_MANY_REDIRECTS). This option only makes
              sense  if  the CURLOPT_FOLLOWLOCATION 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)

       CURLOPT_POSTREDIR
              Pass  a  bitmask  to  control how libcurl acts on redirects after POSTs that get a 301, 302 or 303
              response back.  A parameter with bit 0  set  (value  CURL_REDIR_POST_301)  tells  the  library  to
              respect  RFC2616/10.3.2  and  not  convert  POST  requests  into GET requests when following a 301
              redirection.  Setting bit 1 (value CURL_REDIR_POST_302) makes libcurl maintain the request  method
              after  a  302 redirect whilst setting bit 2 (value CURL_REDIR_POST_303) makes libcurl maintain the
              request method after a 303 redirect. The value CURL_REDIR_POST_ALL is a  convenience  define  that
              sets all three 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  CURLOPT_FOLLOWLOCATION.   (Added  in
              7.17.1) (This option was known as CURLOPT_POST301 up to 7.19.0 as it only supported the 301 then)

       CURLOPT_PUT
              A  parameter  set  to 1 tells the library to use HTTP PUT to transfer data. The data should be set
              with CURLOPT_READDATA and CURLOPT_INFILESIZE.

              This option is deprecated and starting with version 7.12.1 you should instead use CURLOPT_UPLOAD.

       CURLOPT_POST
              A parameter set to 1 tells the library to do a regular HTTP 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 CURLOPT_POSTFIELDS or CURLOPT_COPYPOSTFIELDS options to specify what data to  post  and
              CURLOPT_POSTFIELDSIZE or CURLOPT_POSTFIELDSIZE_LARGE to set the data size.

              Optionally,  you  can  provide  data  to  POST using the CURLOPT_READFUNCTION and CURLOPT_READDATA
              options but then you must make sure to not set  CURLOPT_POSTFIELDS  to  anything  but  NULL.  When
              providing  data  with a callback, you must transmit it using chunked transfer-encoding or you must
              set the size of the data with the CURLOPT_POSTFIELDSIZE or CURLOPT_POSTFIELDSIZE_LARGE 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
              CURLOPT_HTTPHEADER.

              Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.  You can disable this
              header with CURLOPT_HTTPHEADER as usual.

              If  you  use POST to a HTTP 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 CURLOPT_HTTPHEADER. With HTTP 1.0 or without chunked transfer, you must specify the
              size in the request.

              When setting CURLOPT_POST to 1, it will automatically set CURLOPT_NOBODY 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 CURLOPT_NOBODY or CURLOPT_HTTPGET or similar.

       CURLOPT_POSTFIELDS
              Pass a void * as parameter, which should be the full data to post in a HTTP  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.

              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 used one by HTML forms.  See
              also the CURLOPT_POST. Using CURLOPT_POSTFIELDS implies CURLOPT_POST.

              If  you  want to do a zero-byte POST, you need to set CURLOPT_POSTFIELDSIZE explicitly to zero, as
              simply setting CURLOPT_POSTFIELDS to NULL or "" just  effectively  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 HTTP 1.1 implies the use of a "Expect: 100-continue" header.  You can disable this
              header with CURLOPT_HTTPHEADER as usual.

              To make multipart/formdata posts (aka RFC2388-posts), check out the CURLOPT_HTTPPOST option.

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

       CURLOPT_POSTFIELDSIZE_LARGE
              Pass a curl_off_t as parameter. Use this to set the size of the CURLOPT_POSTFIELDS data to prevent
              libcurl  from doing strlen() on the data to figure out the size. This is the large file version of
              the CURLOPT_POSTFIELDSIZE option. (Added in 7.11.1)

       CURLOPT_COPYPOSTFIELDS
              Pass a char * as parameter, which should be the full data to post in a  HTTP  POST  operation.  It
              behaves  as  the  CURLOPT_POSTFIELDS  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
              CURLOPT_POSTFIELDSIZE  or  CURLOPT_POSTFIELDSIZE_LARGE:  If  the  size  has  not been set prior to
              CURLOPT_COPYPOSTFIELDS, 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 CURLOPT_COPYPOSTFIELDS, unless another CURLOPT_POSTFIELDS or  CURLOPT_COPYPOSTFIELDS  option
              is issued.  (Added in 7.17.1)

       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  curl_httppost  structs  as  parameter.
              The  easiest  way to create such a list, is to use curl_formadd(3) as documented. The data in this
              list must remain intact until you close this curl handle again with curl_easy_cleanup(3).

              Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.  You can disable this
              header with CURLOPT_HTTPHEADER as usual.

              When setting CURLOPT_HTTPPOST, it will automatically set CURLOPT_NOBODY to 0 (since 7.14.1).

       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.
              You can also set any custom header with CURLOPT_HTTPHEADER.

       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.
              You can also set any custom header with CURLOPT_HTTPHEADER.

       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 content as in 'Accept:' (no data on the right side of
              the colon), the internally used header will get disabled. Thus, using this option you can add  new
              headers,  replace  internal  headers  and remove internal headers. To add a header with no content
              (nothing to the right side of the colon), use the form 'MyHeader;' (note the ending semicolon).

              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 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 NULL to this to reset back to no custom headers.

              The   most   commonly   replaced   headers   have   "shortcuts"  in  the  options  CURLOPT_COOKIE,
              CURLOPT_USERAGENT and CURLOPT_REFERER.

       CURLOPT_HTTP200ALIASES
              Pass a pointer to a linked list of aliases to be  treated  as  valid  HTTP  200  responses.   Some
              servers  respond  with  a  custom header response line.  For example, IceCast servers respond with
              "ICY 200 OK".  By including this string in your list of aliases, the response will be treated as a
              valid HTTP header line such as "HTTP/1.0 200 OK". (Added in 7.10.3)

              The linked list should be a fully valid list of struct curl_slist structs, and be properly  filled
              in.   Use curl_slist_append(3) to create the list and curl_slist_free_all(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  CURLOPT_HTTP_VERSION,  but starting with 7.16.3 the protocol is assumed to
              match HTTP 1.0 when an alias matched.

       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 and
              CONTENTS 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.

              This option sets the cookie header explicitly 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.

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

       CURLOPT_COOKIEJAR
              Pass a file name as char *, zero terminated. This will make libcurl  write  all  internally  known
              cookies  to  the  specified  file when curl_easy_cleanup(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 session, 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 curl_easy_cleanup(3) is called),
              libcurl  will  not  and  cannot   report   an   error   for   this.   Using   CURLOPT_VERBOSE   or
              CURLOPT_DEBUGFUNCTION will get a warning to display, but that is the only visible feedback you get
              about this possibly lethal situation.

       CURLOPT_COOKIESESSION
              Pass  a  long set to 1 to mark this as a new cookie "session". 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.

       CURLOPT_COOKIELIST
              Pass  a  char  *  to  a  cookie  string. Cookie can be either in Netscape / Mozilla format or just
              regular HTTP-style header (Set-Cookie: ...) format. If cURL cookie engine was not enabled it  will
              enable  its  cookie  engine.   Passing  a magic string "ALL" will erase all cookies known by cURL.
              (Added in 7.14.1) Passing the special string "SESS" will only erase all session cookies  known  by
              cURL. (Added in 7.15.4) Passing the special string "FLUSH" will write all cookies known by cURL to
              the file specified by CURLOPT_COOKIEJAR.  (Added in 7.17.1)

       CURLOPT_HTTPGET
              Pass  a long. If the long is 1, this forces the HTTP 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  CURLOPT_HTTPGET  to  1,  it  will  automatically  set  CURLOPT_NOBODY  to   0   and
              CURLOPT_UPLOAD to 0.

       CURLOPT_HTTP_VERSION
              Pass a long, set to one of the values described below. They force libcurl to use the specific HTTP
              versions. This is not sensible to do unless you have a good reason.

              CURL_HTTP_VERSION_NONE
                     We don't care about what version the library uses. libcurl will use whatever it thinks fit.

              CURL_HTTP_VERSION_1_0
                     Enforce HTTP 1.0 requests.

              CURL_HTTP_VERSION_1_1
                     Enforce HTTP 1.1 requests.

       CURLOPT_IGNORE_CONTENT_LENGTH
              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 accurately report progress, and will simply stop the download when the server ends the
              connection. (added in 7.14.1)

       CURLOPT_HTTP_CONTENT_DECODING
              Pass a long to tell libcurl how to act on content decoding. If set to zero, content decoding  will
              be  disabled.  If set to 1 it is enabled. Libcurl has no default content decoding but requires you
              to use CURLOPT_ACCEPT_ENCODING for that. (added in 7.16.2)

       CURLOPT_HTTP_TRANSFER_DECODING
              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)

SMTP OPTIONS

       CURLOPT_MAIL_FROM
              Pass a pointer to a zero terminated string as parameter.  This  should  be  used  to  specify  the
              sender's email address when sending SMTP mail with libcurl.

              An  originator email address should be specified with angled brackets (<>) around it, which if not
              specified, will be added by libcurl from version 7.21.4 onwards. Failing to provide such  brackets
              may cause the server to reject the email.

              If this parameter is not specified then an empty address will be sent to the mail server which may
              or may not cause the email to be rejected.

              (Added in 7.20.0)

       CURLOPT_MAIL_RCPT
              Pass a pointer to a linked list of recipients to pass to the server in your SMTP mail 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.

              When performing a mail transfer, each recipient should  be  specified  within  a  pair  of  angled
              brackets  (<>),  however, should you not use an angled bracket as the first character libcurl will
              assume you provided a single email address and enclose  that  address  within  brackets  for  you.
              (Added in 7.20.0)

              When  performing an address verification (VRFY command), each recipient should be specified as the
              user name or user name and domain (as per Section 3.5 of RFC5321). (Added in 7.34.0)

              When performing a mailing list expand (EXPN command), each recipient should be specified using the
              mailing list name, such as "Friends" or "London-Office".  (Added in 7.34.0)

       CURLOPT_MAIL_AUTH
              Pass a pointer to a zero terminated string  as  parameter.  This  will  be  used  to  specify  the
              authentication address (identity) of a submitted message that is being relayed to another server.

              This  optional  parameter  allows  co-operating agents in a trusted environment to communicate the
              authentication of individual messages and should only be used by the  application  program,  using
              libcurl,  if  the  application  is  itself  a  mail  server  acting in such an environment. If the
              application is operating as such and the AUTH address is not known or is invalid,  then  an  empty
              string should be used for this parameter.

              Unlike  CURLOPT_MAIL_FROM and CURLOPT_MAIL_RCPT, the address should not be specified within a pair
              of angled brackets (<>). However, if an empty string is used then a pair of brackets will be  sent
              by libcurl as required by RFC2554.

              (Added in 7.25.0)

TFTP OPTIONS

       CURLOPT_TFTP_BLKSIZE
              Specify block size to use for TFTP data transmission. Valid range as per RFC2348 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

       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, 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.

              The  address can be followed by a ':' to specify a port, optionally followed by a '-' to specify a
              port range.  If the port specified is 0, the operating system will pick a free port.  If  a  range
              is   provided   and   all   ports   in   the   range   are  not  available,  libcurl  will  report
              CURLE_FTP_PORT_FAILED for the handle.  Invalid port/range settings are  ignored.   IPv6  addresses
              followed  by  a  port  or  portrange  have  to  be in brackets.  IPv6 addresses without port/range
              specifier can be in brackets.  (added in 7.19.5)

              Examples with specified ports:

                eth0:0
                192.168.1.2:32000-33000
                curl.se:32123
                [::1]:1234-4567

              You disable PORT again and go back to using the passive version by setting this option to NULL.

       CURLOPT_QUOTE
              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 curl_slist' structs properly  filled
              in with text strings. Use curl_slist_append(3) to append strings (commands) to the list, and clear
              the  entire list afterwards with curl_slist_free_all(3). Disable this operation again by setting a
              NULL to this option. When speaking to a FTP (or SFTP since 7.24.0) server, prefix the command with
              an asterisk (*) to make libcurl continue even if the command fails as by default libcurl will stop
              at first failure.

              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)

       CURLOPT_POSTQUOTE
              Pass  a  pointer  to  a  linked  list of FTP or SFTP commands to pass to the server after your FTP
              transfer request. The commands will only be run if no error occurred. The linked list should be  a
              fully  valid  list of struct curl_slist structs properly filled in as described for CURLOPT_QUOTE.
              Disable this operation again by setting a NULL to this option.

       CURLOPT_PREQUOTE
              Pass a pointer to a linked list of FTP commands to pass to the server after the transfer  type  is
              set.  The linked list should be a fully valid list of struct curl_slist structs properly filled in
              as described for CURLOPT_QUOTE. Disable this operation again by setting a  NULL  to  this  option.
              Before version 7.16.0, if you also set CURLOPT_NOBODY to 1, this option didn't work.

       CURLOPT_DIRLISTONLY
              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 subdirectories and symbolic links.

              Setting this option to 1 also implies a directory listing even if  the  URL  doesn't  end  with  a
              slash, which otherwise is necessary.

              Do  NOT  use  this  option if you also use CURLOPT_WILDCARDMATCH as it will effectively break that
              feature then.

              (This option was known as CURLOPT_FTPLISTONLY up to 7.16.4)

       CURLOPT_APPEND
              A parameter set to 1 tells the library to append to the remote file instead of overwrite it.  This
              is only useful when uploading to an FTP site.

              (This option was known as CURLOPT_FTPAPPEND up to 7.16.4)

       CURLOPT_FTP_USE_EPRT
              Pass a long. If the value is 1, it tells curl to use the EPRT (and LPRT) command when doing active
              FTP  downloads  (which is enabled by CURLOPT_FTPPORT). 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.

       CURLOPT_FTP_USE_EPSV
              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.

       CURLOPT_FTP_USE_PRET
              Pass a long. If the value is 1, it tells curl to send a  PRET  command  before  PASV  (and  EPSV).
              Certain  FTP  servers,  mainly drftpd, require this non-standard command for directory listings as
              well as up and downloads in PASV mode. Has no effect when using the  active  FTP  transfers  mode.
              (Added in 7.20.0)

       CURLOPT_FTP_CREATE_MISSING_DIRS
              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
              simultaneous  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 CURLFTP_CREATE_DIR and CURLFTP_CREATE_DIR_RETRY
              enum names for these arguments.

              Before version 7.19.4, libcurl will simply ignore arguments set to 2 and act as if 1 was selected.

       CURLOPT_FTP_RESPONSE_TIMEOUT
              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 overrides CURLOPT_TIMEOUT.
              It   is   recommended   that   if   used   in   conjunction   with   CURLOPT_TIMEOUT,   you    set
              CURLOPT_FTP_RESPONSE_TIMEOUT to a value smaller than CURLOPT_TIMEOUT.  (Added in 7.10.8)

       CURLOPT_FTP_ALTERNATIVE_TO_USER
              Pass  a  char * as parameter, pointing to a string which will be used to authenticate if the usual
              FTP "USER user" and "PASS 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)

       CURLOPT_FTP_SKIP_PASV_IP
              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  connects  the  data  connection.  Instead
              libcurl  will  re-use  the same IP address it already uses for the control 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.

       CURLOPT_FTPSSLAUTH
              Pass a long using one of the values from below, to alter how libcurl issues "AUTH  TLS"  or  "AUTH
              SSL" when FTP over SSL is activated (see CURLOPT_USE_SSL). (Added in 7.12.2)

              CURLFTPAUTH_DEFAULT
                     Allow libcurl to decide.

              CURLFTPAUTH_SSL
                     Try "AUTH SSL" first, and only if that fails try "AUTH TLS".

              CURLFTPAUTH_TLS
                     Try "AUTH TLS" first, and only if that fails try "AUTH SSL".

       CURLOPT_FTP_SSL_CCC
              If  enabled,  this option makes libcurl use CCC (Clear Command Channel). It shuts down the SSL/TLS
              layer after authenticating. The rest of the control channel  communication  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)

              CURLFTPSSL_CCC_NONE
                     Don't attempt to use CCC.

              CURLFTPSSL_CCC_PASSIVE
                     Do not initiate the shutdown, but wait for the server to do it. Do not send a reply.

              CURLFTPSSL_CCC_ACTIVE
                     Initiate the shutdown and wait for a reply.

       CURLOPT_FTP_ACCOUNT
              Pass a pointer to a zero terminated string (or NULL 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
              ACCT command. (Added in 7.13.0)

       CURLOPT_FTP_FILEMETHOD
              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:

              CURLFTPMETHOD_MULTICWD
                     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.

              CURLFTPMETHOD_NOCWD
                     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.

              CURLFTPMETHOD_SINGLECWD
                     libcurl does one CWD with  the  full  target  directory  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)

RTSP OPTIONS

       CURLOPT_RTSP_REQUEST
              Tell libcurl what kind of RTSP request to make. Pass one of the following RTSP enum values. Unless
              noted otherwise, commands require the Session ID to be initialized. (Added in 7.20.0)

              CURL_RTSPREQ_OPTIONS
                     Used to retrieve the available methods of the server. The application  is  responsible  for
                     parsing  and  obeying the response. (The session ID is not needed for this method.)  (Added
                     in 7.20.0)

              CURL_RTSPREQ_DESCRIBE
                     Used to get the low level description of a stream. The application should note what formats
                     it understands in the 'Accept:' header. Unless set  manually,  libcurl  will  automatically
                     fill  in  'Accept:  application/sdp'.  Time-condition  headers  will  be  added to Describe
                     requests if the CURLOPT_TIMECONDITION option is active. (The session ID is not  needed  for
                     this method)  (Added in 7.20.0)

              CURL_RTSPREQ_ANNOUNCE
                     When  sent by a client, this method changes the description of the session. For example, if
                     a client is using the server to record a meeting, the client can use Announce to inform the
                     server of all the meta-information about the session.  ANNOUNCE acts like  a  HTTP  PUT  or
                     POST just like CURL_RTSPREQ_SET_PARAMETER (Added in 7.20.0)

              CURL_RTSPREQ_SETUP
                     Setup  is  used to initialize the transport layer for the session. The application must set
                     the desired Transport options for a session  by  using  the  CURLOPT_RTSP_TRANSPORT  option
                     prior  to  calling  setup.  If no session ID is currently set with CURLOPT_RTSP_SESSION_ID,
                     libcurl will extract and use the session ID in the response to this request.  (The  session
                     ID is not needed for this method).  (Added in 7.20.0)

              CURL_RTSPREQ_PLAY
                     Send a Play command to the server. Use the CURLOPT_RANGE option to modify the playback time
                     (e.g. 'npt=10-15').  (Added in 7.20.0)

              CURL_RTSPREQ_PAUSE
                     Send  a  Pause  command  to the server. Use the CURLOPT_RANGE option with a single value to
                     indicate when the stream should be halted. (e.g. npt='25') (Added in 7.20.0)

              CURL_RTSPREQ_TEARDOWN
                     This command terminates an RTSP session. Simply closing a connection does not terminate the
                     RTSP session since it is valid to control  an  RTSP  session  over  different  connections.
                     (Added in 7.20.0)

              CURL_RTSPREQ_GET_PARAMETER
                     Retrieve  a  parameter  from  the  server. By default, libcurl will automatically include a
                     Content-Type: text/parameters header on all non-empty requests unless a custom one is  set.
                     GET_PARAMETER  acts  just  like  a  HTTP  PUT  or  POST  (see  CURL_RTSPREQ_SET_PARAMETER).
                     Applications wishing to send a heartbeat  message  (e.g.  in  the  presence  of  a  server-
                     specified timeout) should send use an empty GET_PARAMETER request.  (Added in 7.20.0)

              CURL_RTSPREQ_SET_PARAMETER
                     Set  a  parameter  on the server. By default, libcurl will automatically include a Content-
                     Type: text/parameters header unless a custom one is set. The interaction with  SET_PARAMTER
                     is  much  like  a  HTTP  PUT  or  POST.  An  application may either use CURLOPT_UPLOAD with
                     CURLOPT_READDATA like a HTTP PUT, or it may use CURLOPT_POSTFIELDS like  a  HTTP  POST.  No
                     chunked  transfers  are  allowed, so the application must set the CURLOPT_INFILESIZE in the
                     former and CURLOPT_POSTFIELDSIZE in the latter. Also, there is no use of  multi-part  POSTs
                     within RTSP. (Added in 7.20.0)

              CURL_RTSPREQ_RECORD
                     Used  to  tell  the  server to record a session. Use the CURLOPT_RANGE option to modify the
                     record time. (Added in 7.20.0)

              CURL_RTSPREQ_RECEIVE
                     This is a special request because it does not send any data to the server. The  application
                     may  call  this  function  in  order  to receive interleaved RTP data. It will return after
                     processing one read buffer of data in order to give the application a chance to run. (Added
                     in 7.20.0)

       CURLOPT_RTSP_SESSION_ID
              Pass a char * as a parameter to set the value of the current  RTSP  Session  ID  for  the  handle.
              Useful  for resuming an in-progress session. Once this value is set to any non-NULL value, libcurl
              will return CURLE_RTSP_SESSION_ERROR if ID received from the server does not match. If  unset  (or
              set  to  NULL),  libcurl  will  automatically  set  the  ID the first time the server sets it in a
              response. (Added in 7.20.0)

       CURLOPT_RTSP_STREAM_URI
              Set the stream URI to operate on by passing a char * .  For  example,  a  single  session  may  be
              controlling  rtsp://foo/twister/audio  and rtsp://foo/twister/video and the application can switch
              to the appropriate stream using this option. If  unset,  libcurl  will  default  to  operating  on
              generic server options by passing '*' in the place of the RTSP Stream URI. This option is distinct
              from CURLOPT_URL. When working with RTSP, the CURLOPT_STREAM_URI indicates what URL to send to the
              server  in  the  request  header  while the CURLOPT_URL indicates where to make the connection to.
              (e.g. the CURLOPT_URL for the above examples might be set to rtsp://foo/twister (Added in 7.20.0)

       CURLOPT_RTSP_TRANSPORT
              Pass a char * to tell libcurl what to pass for the Transport: header for this RTSP  session.  This
              is  mainly a convenience method to avoid needing to set a custom Transport: header for every SETUP
              request. The application must set a Transport: header before issuing a SETUP  request.  (Added  in
              7.20.0)

       CURLOPT_RTSP_HEADER
              This  option  is simply an alias for CURLOPT_HTTP_HEADER. Use this to replace the standard headers
              that RTSP and HTTP share. It is also valid to use the shortcuts such as CURLOPT_USERAGENT.  (Added
              in 7.20.0)

       CURLOPT_RTSP_CLIENT_CSEQ
              Manually  set the the CSEQ number to issue for the next RTSP request. Useful if the application is
              resuming a previously broken connection. The CSEQ will increment from this new number  henceforth.
              (Added in 7.20.0)

       CURLOPT_RTSP_SERVER_CSEQ
              Manually  set  the CSEQ number to expect for the next RTSP Server->Client request.  At the moment,
              this feature (listening for Server requests) is unimplemented. (Added in 7.20.0)

PROTOCOL OPTIONS

       CURLOPT_TRANSFERTEXT
              A parameter set to 1 tells the library to use ASCII 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 similar.

              libcurl does not do a complete ASCII conversion when doing ASCII transfers over  FTP.  This  is  a
              known  limitation/flaw  that  nobody  has  rectified.  libcurl  simply  sets the mode to ASCII and
              performs a standard transfer.

       CURLOPT_PROXY_TRANSFER_MODE
              Pass a long. If the value is set to 1 (one), it tells libcurl to set the transfer mode (binary  or
              ASCII)  for  FTP  transfers  done  via  a  HTTP proxy, by appending ;type=a or ;type=i to the URL.
              Without this setting, or it being set to 0 (zero, the default), CURLOPT_TRANSFERTEXT has no effect
              when doing FTP via a proxy. Beware that not all proxies support this feature.  (Added in 7.18.0)

       CURLOPT_CRLF
              Pass a long. If the value is set to 1 (one), libcurl converts Unix newlines to  CRLF  newlines  on
              transfers. Disable this option again by setting the value to 0 (zero).

       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". Using this kind of multiple intervals will cause  the  HTTP
              server  to  send  the response document in pieces (using standard MIME separation techniques). For
              RTSP, the formatting of a range should follow RFC2326 Section 12.29. For RTSP, byte ranges are not
              permitted. Instead, ranges should be given in npt, utc, or smpte formats.

              Pass a NULL to this option to disable the use of ranges.

              Ranges work on HTTP, FTP, FILE (since 7.18.0), and RTSP (since 7.20.0) transfers only.

       CURLOPT_RESUME_FROM
              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).

              When  doing uploads with FTP, the resume position is where in the local/source file libcurl should
              try to resume the upload from and it will then append the source file to the remote target file.

       CURLOPT_RESUME_FROM_LARGE
              Pass a curl_off_t as parameter. It contains the offset in  number  of  bytes  that  you  want  the
              transfer to start from. (Added in 7.11.0)

       CURLOPT_CUSTOMREQUEST
              Pass a pointer to a zero terminated string as parameter.

              When  you  change  the  request  method  by  setting CURLOPT_CUSTOMREQUEST 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.

              Restore to the internal default by setting this to NULL.

              This option can be used to specify the request:

              HTTP

              Instead  of  GET  or  HEAD  when  performing HTTP based requests. This is particularly useful, for
              example, for performing a HTTP DELETE request.

              For example:

              When you tell libcurl to do a HEAD request, but then specify a GET though a custom request libcurl
              will still act as if it sent a HEAD. To switch to a proper HEAD use CURLOPT_NOBODY, to switch to a
              proper  POST  use  CURLOPT_POST  or  CURLOPT_POSTFIELDS  and  to  switch  to  a  proper  GET   use
              CURLOPT_HTTPGET.

              Please don't perform this at will, on HTTP based requests, by making sure your server supports the
              command you are sending first.

              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 CURLOPT_POST and
              CURLOPT_POSTFIELDS to set POST data. Use CURLOPT_HTTPHEADER  to  replace  or  extend  the  set  of
              headers sent by libcurl. Use CURLOPT_HTTP_VERSION to change HTTP version.

              FTP

              Instead of LIST and NLST when performing FTP directory listings.

              IMAP

              Instead of LIST when issuing IMAP based requests. (Added in 7.30.0)

              POP3

              Instead of LIST and RETR when issuing POP3 based requests. (Added in 7.26.0)

              For example:

              When  you tell libcurl to use a custom request it will behave like a LIST or RETR command was sent
              where it expects data to be returned by the server. As such CURLOPT_NOBODY  should  be  used  when
              specifying commands such as DELE and NOOP for example.

              SMTP

              Instead of a HELP or VRFY when issuing SMTP based requests. (Added in 7.34.0)

              For example:

              Normally   a   multiline   response   is   returned   which  can  be  used,  in  conjuection  with
              CURLOPT_MAIL_RCPT, to specify an EXPN request. If the CURLOPT_NOBODY option is specified then  the
              request can be used to issue NOOP and RSET commands.

       CURLOPT_FILETIME
              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  curl_easy_getinfo(3)  function with the CURLINFO_FILETIME argument can be
              used after a transfer to extract the received time (if any).

       CURLOPT_NOBODY
              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 HTTP(S) servers, this will
              make libcurl do a HEAD request.

              To change request to GET, you should use CURLOPT_HTTPGET. Change request to POST with CURLOPT_POST
              etc.

       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.  This  value  should  be  passed  as  a  long.  See  also
              CURLOPT_INFILESIZE_LARGE.

              For uploading using SCP, this option or CURLOPT_INFILESIZE_LARGE is mandatory.

              To "unset" this value again, set it to -1.

              When sending emails using SMTP, this command can be used to specify the  optional  SIZE  parameter
              for the MAIL FROM command. (Added in 7.23.0)

              This  option  does  not  limit  how  much  data  libcurl will actually send, as that is controlled
              entirely by what the read callback returns.

       CURLOPT_INFILESIZE_LARGE
              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 curl_off_t. (Added in 7.11.0)

              For uploading using SCP, this option or CURLOPT_INFILESIZE is mandatory.

              To "unset" this value again, set it to -1.

              When  sending  emails  using SMTP, this command can be used to specify the optional SIZE parameter
              for the MAIL FROM command. (Added in 7.23.0)

              This option does not limit how much data  libcurl  will  actually  send,  as  that  is  controlled
              entirely by what the read callback returns.

       CURLOPT_UPLOAD
              A  parameter  set  to  1  tells  the  library  to  prepare for an upload. The CURLOPT_READDATA and
              CURLOPT_INFILESIZE or CURLOPT_INFILESIZE_LARGE options are also interesting for  uploads.  If  the
              protocol is HTTP, uploading means using the PUT request unless you tell libcurl otherwise.

              Using  PUT with HTTP 1.1 implies the use of a "Expect: 100-continue" header.  You can disable this
              header with CURLOPT_HTTPHEADER as usual.

              If you use PUT to a HTTP 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 CURLOPT_HTTPHEADER. With HTTP 1.0 or without chunked  transfer,  you  must
              specify the size.

       CURLOPT_MAXFILESIZE
              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
              CURLE_FILESIZE_EXCEEDED 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
              HTTP transfers.

       CURLOPT_MAXFILESIZE_LARGE
              Pass  a  curl_off_t 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
              CURLE_FILESIZE_EXCEEDED 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
              HTTP transfers.

       CURLOPT_TIMECONDITION
              Pass  a  long  as parameter. This defines how the CURLOPT_TIMEVALUE time value is treated. You can
              set this parameter to CURL_TIMECOND_IFMODSINCE or CURL_TIMECOND_IFUNMODSINCE. This feature applies
              to HTTP, FTP, RTSP, and FILE.

              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. curl_easy_getinfo(3) with
              the  CURLINFO_CONDITION_UNMET  option  can  be  used  after  a  transfer  to  learn if a zero-byte
              successful "transfer" was due to this condition not matching.

       CURLOPT_TIMEVALUE
              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 CURLOPT_TIMECONDITION.

CONNECTION OPTIONS

       CURLOPT_TIMEOUT
              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 CURLOPT_NOSIGNAL is set.

              Default timeout is 0 (zero) which means it never times out.

       CURLOPT_TIMEOUT_MS
              An alternative to CURLOPT_TIMEOUT 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.

              If both CURLOPT_TIMEOUT and CURLOPT_TIMEOUT_MS are set, the value set last will be used.

              (Added in 7.16.2)

       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_MAX_SEND_SPEED_LARGE
              Pass a curl_off_t 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 parameter value.  Defaults to unlimited speed.

              This option doesn't affect transfer speeds done with FILE:// URLs. (Added in
               7.15.5)

       CURLOPT_MAX_RECV_SPEED_LARGE
              Pass a curl_off_t 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 parameter value. Defaults to unlimited speed.

              This option doesn't affect transfer speeds done with FILE:// URLs. (Added in 7.15.5)

       CURLOPT_MAXCONNECTS
              Pass  a  long. The set number will be the persistent connection 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 MAXCONNECTS than
              before may cause open connections to get closed unnecessarily.

              If you add this easy handle to a multi handle, this setting is  not  acknowledged,  and  you  must
              instead use curl_multi_setopt(3) and the CURLMOPT_MAXCONNECTS option.

       CURLOPT_CLOSEPOLICY
              (Obsolete) This option does nothing.

       CURLOPT_FRESH_CONNECT
              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 existing 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).

       CURLOPT_FORBID_REUSE
              Pass  a  long.  Set  to  1  to  make  the next transfer explicitly 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).

       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 switch to the default built-in connection timeout - 300 seconds. See
              also the CURLOPT_TIMEOUT option.

              In unix-like systems, this might cause signals to be used unless CURLOPT_NOSIGNAL is set.

       CURLOPT_CONNECTTIMEOUT_MS
              Like CURLOPT_CONNECTTIMEOUT but takes the number of milliseconds instead. If libcurl is  built  to
              use  the  standard  system  name  resolver, that portion of the connect will still use full-second
              resolution for timeouts with a minimum timeout allowed of one second.  (Added in 7.16.2)

       CURLOPT_IPRESOLVE
              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 addresses using more than one version of
              IP. The allowed values are:

              CURL_IPRESOLVE_WHATEVER
                     Default, resolves addresses to all IP versions that your system allows.

              CURL_IPRESOLVE_V4
                     Resolve to IPv4 addresses.

              CURL_IPRESOLVE_V6
                     Resolve to IPv6 addresses.

       CURLOPT_CONNECT_ONLY
              Pass a long. If the parameter equals 1, it tells the library to perform  all  the  required  proxy
              authentication  and  connection setup, but no data transfer.  This option is implemented for HTTP,
              SMTP and POP3.

              The option can be used to simply test a connection to a server, but is more useful when used  with
              the  CURLINFO_LASTSOCKET  option  to curl_easy_getinfo(3) as 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)

       CURLOPT_USE_SSL
              Pass  a long using one of the values from below, to make libcurl use your desired level of SSL for
              the transfer. (Added in 7.11.0)

              This is for enabling SSL/TLS when you use FTP, SMTP, POP3, IMAP etc.

              (This option was known  as  CURLOPT_FTP_SSL  up  to  7.16.4,  and  the  constants  were  known  as
              CURLFTPSSL_*)

              CURLUSESSL_NONE
                     Don't attempt to use SSL.

              CURLUSESSL_TRY
                     Try using SSL, proceed as normal otherwise.

              CURLUSESSL_CONTROL
                     Require SSL for the control connection or fail with CURLE_USE_SSL_FAILED.

              CURLUSESSL_ALL
                     Require SSL for all communication or fail with CURLE_USE_SSL_FAILED.

       CURLOPT_RESOLVE
              Pass  a pointer to a linked list of strings with host name resolve information to use for requests
              with this handle. 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.

              Each single name resolve string should be written using the format HOST:PORT:ADDRESS where HOST is
              the name libcurl will try to resolve, PORT is the port number of the service where  libcurl  wants
              to  connect  to  the  HOST and ADDRESS is the numerical IP address. If libcurl is built to support
              IPv6, ADDRESS can of course be either IPv4 or IPv6 style addressing.

              This option effectively pre-populates the DNS  cache  with  entries  for  the  host+port  pair  so
              redirects  and  everything  that  operations  against the HOST+PORT will instead use your provided
              ADDRESS. Addresses to set with CURL_RESOLVE will not time-out from the DNS  cache  like  ordindary
              entries.

              You can remove names from the DNS cache again, to stop providing these fake resolves, by including
              a string in the linked list that uses the format "-HOST:PORT". The host name must be prefixed with
              a dash, and the host name and port number must exactly match what was already added previously.

              (Added in 7.21.3)

       CURLOPT_DNS_SERVERS
              Set  the  list  of  DNS  servers  to be used instead of the system default.  The format of the dns
              servers option is:

              host[:port][,host[:port]]...

              For example:

              192.168.1.100,192.168.1.101,3.4.5.6

              This option requires that libcurl was built with a resolver backend that supports this  operation.
              The c-ares backend is the only such one.

              (Added in 7.24.0)

       CURLOPT_DNS_INTERFACE
              Pass  a  char  *  as parameter. Set the name of the network interface that the DNS resolver should
              bind to. This must be an interface name (not an address). Set this  option  to  NULL  to  use  the
              default setting (don't bind to a specific interface).

              This  option requires that libcurl was built with a resolver backend that supports this operation.
              The c-ares backend is the only such one.

              (Added in 7.33.0)

       CURLOPT_DNS_LOCAL_IP4
              Set the local IPv4 address that the resolver should bind to. The argument should be of type char *
              and contain a single IPv4 address as a string.  Set this option to NULL to use the default setting
              (don't bind to a specific IP address).

              This option requires that libcurl was built with a resolver backend that supports this  operation.
              The c-ares backend is the only such one.

              (Added in 7.33.0)

       CURLOPT_DNS_LOCAL_IP6
              Set the local IPv6 address that the resolver should bind to. The argument should be of type char *
              and contain a single IPv6 address as a string.  Set this option to NULL to use the default setting
              (don't bind to a specific IP address).

              This  option requires that libcurl was built with a resolver backend that supports this operation.
              The c-ares backend is the only such one.

              (Added in 7.33.0)

       CURLOPT_ACCEPTTIMEOUT_MS
              Pass a long telling libcurl the maximum number of milliseconds to wait for  a  server  to  connect
              back  to libcurl when an active FTP connection is used. If no timeout is set, the internal default
              of 60000 will be used. (Added in 7.24.0)

SSL and SECURITY OPTIONS

       CURLOPT_SSLCERT
              Pass a pointer to a zero terminated string as parameter. The string should be  the  file  name  of
              your  certificate. The default format is "P12" on Secure Transport and "PEM" on other engines, and
              can be changed with CURLOPT_SSLCERTTYPE.

              With NSS or Secure Transport, this can also be  the  nickname  of  the  certificate  you  wish  to
              authenticate  with  as  it  is  named in the security database. If you want to use a file from the
              current directory, please precede it with  "./"  prefix,  in  order  to  avoid  confusion  with  a
              nickname.

       CURLOPT_SSLCERTTYPE
              Pass  a  pointer to a zero terminated string as parameter. The string should be the format of your
              certificate. Supported formats  are  "PEM"  and  "DER",  except  with  Secure  Transport.  OpenSSL
              (versions  0.9.3  and  later) and Secure Transport (on iOS 5 or later, or OS X 10.7 or later) also
              support "P12" for PKCS#12-encoded files. (Added in 7.9.3)

       CURLOPT_SSLKEY
              Pass a pointer to a zero terminated string as parameter. The string should be  the  file  name  of
              your private key. The default format is "PEM" and can be changed with CURLOPT_SSLKEYTYPE.

              (iOS  and Mac OS X only) This option is ignored if curl was built against Secure Transport. Secure
              Transport expects the private key to be already present in the keychain or PKCS#12 file containing
              the certificate.

       CURLOPT_SSLKEYTYPE
              Pass a pointer to a zero terminated string as parameter. The string should be the format  of  your
              private key. Supported formats are "PEM", "DER" and "ENG".

              The  format  "ENG"  enables  you  to  load  the  private  key  from  a crypto engine. In this case
              CURLOPT_SSLKEY is used as an identifier passed to the engine. You have to set  the  crypto  engine
              with  CURLOPT_SSLENGINE.   "DER"  format  key  file  currently  does  not work because of a bug in
              OpenSSL.

       CURLOPT_KEYPASSWD
              Pass a pointer to a zero terminated string as parameter. It will be used as the password  required
              to  use  the  CURLOPT_SSLKEY  or CURLOPT_SSH_PRIVATE_KEYFILE 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 CURLOPT_SSLKEYPASSWD up to 7.16.4 and CURLOPT_SSLCERTPASSWD up to 7.9.2)

       CURLOPT_SSLENGINE
              Pass a pointer to a zero terminated string as parameter. 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, CURLE_SSL_ENGINE_NOTFOUND is returned.

       CURLOPT_SSLENGINE_DEFAULT
              Sets the actual crypto engine as the default for (asymmetric) crypto operations.

              If the crypto device cannot be set, CURLE_SSL_ENGINE_SETFAILED is returned.

              Even though this option doesn't need any parameter, in some configurations curl_easy_setopt  might
              be  defined  as  a  macro taking exactly three arguments. Therefore, it's recommended to pass 1 as
              parameter to this option.

       CURLOPT_SSLVERSION
              Pass a long as parameter to control what version of SSL/TLS to attempt to use.  (Added in 7.9.2)

              The available options are:

              CURL_SSLVERSION_DEFAULT
                     The default action. This will attempt to figure out the remote SSL protocol  version,  i.e.
                     either SSLv3 or TLSv1 (but not SSLv2, which became disabled by default with 7.18.1).

              CURL_SSLVERSION_TLSv1
                     Force TLSv1.x

              CURL_SSLVERSION_SSLv2
                     Force SSLv2

              CURL_SSLVERSION_SSLv3
                     Force SSLv3

              CURL_SSLVERSION_TLSv1_0
                     Force TLSv1.0 (Added in 7.34.0)

              CURL_SSLVERSION_TLSv1_1
                     Force TLSv1.1 (Added in 7.34.0)

              CURL_SSLVERSION_TLSv1_2
                     Force TLSv1.2 (Added in 7.34.0)

       CURLOPT_SSL_VERIFYPEER
              Pass a long as parameter. By default, curl assumes a value of 1.

              This  option  determines whether curl verifies the authenticity of the peer's certificate. A value
              of 1 means curl verifies; 0 (zero) means it doesn't.

              When negotiating a SSL 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  signatures,  rooted  in
              certification  authority  (CA)  certificates  you  supply.   curl  uses  a  default  bundle  of CA
              certificates (the path for that is determined  at  build  time)  and  you  can  specify  alternate
              certificates with the CURLOPT_CAINFO option or the CURLOPT_CAPATH option.

              When  CURLOPT_SSL_VERIFYPEER  is nonzero, and the verification fails to prove that the certificate
              is authentic, the connection fails.  When the option is zero, the  peer  certificate  verification
              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  CURLOPT_SSL_VERIFYHOST to control that. The check that the host name in the certificate
              is  valid  for  the  host   name   you're   connecting   to   is   done   independently   of   the
              CURLOPT_SSL_VERIFYPEER option.

       CURLOPT_CAINFO
              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 CURLOPT_SSL_VERIFYPEER
              option.  If CURLOPT_SSL_VERIFYPEER is zero, CURLOPT_CAINFO need not even  indicate  an  accessible
              file.

              This  option  is  by default set to the system path where libcurl's cacert bundle is assumed to be
              stored, as established at build time.

              If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module (libnsspem.so)  needs  to
              be available for this option to work properly.

       CURLOPT_ISSUERCERT
              Pass a char * to a zero terminated string naming a file holding a CA certificate in PEM format. If
              the  option  is  set,  an additional check against the peer certificate 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 certificate is from a
              specific branch of the tree.

              This option makes sense only when used in  combination  with  the  CURLOPT_SSL_VERIFYPEER  option.
              Otherwise, the result of the check is not considered as failure.

              A  specific  error  code (CURLE_SSL_ISSUER_ERROR) is defined with the option, which is returned if
              the setup of the SSL/TLS session has failed due to a mismatch with the issuer of peer  certificate
              (CURLOPT_SSL_VERIFYPEER has to be set too for the check to fail). (Added in 7.19.0)

       CURLOPT_CAPATH
              Pass  a  char * to a zero terminated string naming a directory holding multiple CA certificates to
              verify the peer with. If libcurl is built against  OpenSSL,  the  certificate  directory  must  be
              prepared  using the openssl c_rehash utility.  This makes sense only when used in combination with
              the CURLOPT_SSL_VERIFYPEER option.  If CURLOPT_SSL_VERIFYPEER is  zero,  CURLOPT_CAPATH  need  not
              even indicate an accessible path.  The CURLOPT_CAPATH function apparently does not work in Windows
              due  to some limitation in openssl. This option is OpenSSL-specific and does nothing if libcurl is
              built to use GnuTLS. NSS-powered libcurl provides the option only for backward compatibility.

       CURLOPT_CRLFILE
              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 SSL exchange.

              When  curl  is  built  to use NSS or GnuTLS, there is no way to influence the use of CRL passed to
              help  in   the   verification   process.   When   libcurl   is   built   with   OpenSSL   support,
              X509_V_FLAG_CRL_CHECK  and X509_V_FLAG_CRL_CHECK_ALL 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 CURLOPT_SSL_VERIFYPEER option.

              A specific error code (CURLE_SSL_CRL_BADFILE) is defined with the option. It is returned when  the
              SSL  exchange  fails because the CRL file cannot be loaded.  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)

       CURLOPT_SSL_VERIFYHOST
              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 SSL connection, the server sends a certificate indicating its identity.

              When  CURLOPT_SSL_VERIFYHOST 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,  curl_easy_setopt  will  return an error and the option value will not be
              changed.  It was previously (in 7.28.0 and earlier) a debug option of some sorts,  but  it  is  no
              longer supported due to frequently leading to programmer mistakes.

              When the value is 0, the connection succeeds regardless of the names in the certificate.

              The default value for this option is 2.

              This  option  controls  checking the server's certificate's claimed identity.  The server could be
              lying.  To control lying, see  CURLOPT_SSL_VERIFYPEER.   If  libcurl  is  built  against  NSS  and
              CURLOPT_SSL_VERIFYPEER  is  zero,  CURLOPT_SSL_VERIFYHOST  is  also  set  to  zero  and  cannot be
              overridden.

       CURLOPT_CERTINFO
              Pass a long set to 1 to enable libcurl's certificate  chain  info  gatherer.  With  this  enabled,
              libcurl  (if  built  with OpenSSL, NSS, GSKit or QsoSSL) will extract lots of information and data
              about the certificates in the certificate chain used in the SSL connection. This data may then  be
              retrieved  after a transfer using curl_easy_getinfo(3) and its option CURLINFO_CERTINFO. (Added in
              7.19.1)

       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 the SSL connection
              will become.

       CURLOPT_EGDSOCKET
              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_SSL_CIPHER_LIST
              Pass a char *, pointing to a zero terminated string holding the list of ciphers to use for the SSL
              connection.  The  list  must  be  syntactically correct, it consists 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 OpenSSL and GnuTLS valid examples of cipher lists include 'RC4-SHA', ´SHA1+DES´,  'TLSv1'  and
              'DEFAULT'. The default list is normally set when you compile OpenSSL.

              You'll      find      more      details      about      cipher      lists     on     this     URL:
              http://www.openssl.org/docs/apps/ciphers.html

              For NSS, valid examples of cipher lists include 'rsa_rc4_128_md5',  ´rsa_aes_128_sha´,  etc.  With
              NSS  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    NSS    cipher    lists    on    this     URL:
              http://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives

       CURLOPT_SSL_SESSIONID_CACHE
              Pass  a  long set to 0 to disable libcurl's use of SSL session-ID caching. Set this to 1 to enable
              it. By default all transfers are done using the cache. While  nothing  ever  should  get  hurt  by
              attempting  to reuse SSL session-IDs, there seem to be broken SSL implementations in the wild that
              may require you to disable this in order for you to succeed. (Added in 7.16.0)

       CURLOPT_SSL_OPTIONS
              Pass a long with a bitmask to tell libcurl about specific SSL behaviors.

              CURLSSLOPT_ALLOW_BEAST is the only supported bit and by setting this the user will tell libcurl to
              not attempt to use any workarounds for a security flaw in the SSL3 and TLS1.0 protocols.  If  this
              option  isn't  used  or this bit is set to 0, the SSL layer libcurl uses may use a work-around for
              this flaw although it might cause interoperability problems with some (older) SSL implementations.
              WARNING: avoiding this work-around loosens the security, and by setting this option to 1  you  ask
              for exactly that. (Added in 7.25.0)

       CURLOPT_KRBLEVEL
              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 NULL to disable kerberos
              support for FTP.

              (This option was known as CURLOPT_KRB4LEVEL up to 7.16.3)

       CURLOPT_GSSAPI_DELEGATION
              Set   the  parameter  to  CURLGSSAPI_DELEGATION_FLAG  to  allow  unconditional  GSSAPI  credential
              delegation.   The  delegation  is  disabled  by  default  since  7.21.7.   Set  the  parameter  to
              CURLGSSAPI_DELEGATION_POLICY_FLAG  to  delegate  only  if  the  OK-AS-DELEGATE  flag is set in the
              service ticket in case this feature is supported by the GSSAPI implementation and  the  definition
              of GSS_C_DELEG_POLICY_FLAG was available at compile-time.  (Added in 7.22.0)

SSH OPTIONS

       CURLOPT_SSH_AUTH_TYPES
              Pass   a   long   set   to  a  bitmask  consisting  of  one  or  more  of  CURLSSH_AUTH_PUBLICKEY,
              CURLSSH_AUTH_PASSWORD,  CURLSSH_AUTH_HOST,  CURLSSH_AUTH_KEYBOARD  and   CURLSSH_AUTH_AGENT.   Set
              CURLSSH_AUTH_ANY  to  let  libcurl pick a suitable one. Currently CURLSSH_AUTH_HOST has no effect.
              (Added in 7.16.1) If CURLSSH_AUTH_AGENT is used, libcurl  attempts  to  connect  to  ssh-agent  or
              pageant and let the agent attempt the authentication. (Added in 7.28.0)

       CURLOPT_SSH_HOST_PUBLIC_KEY_MD5
              Pass  a char * pointing to a string containing 32 hexadecimal 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)

       CURLOPT_SSH_PUBLIC_KEYFILE
              Pass  a  char  *  pointing  to  a  file name for your public key. If not used, libcurl defaults to
              $HOME/.ssh/id_dsa.pub if the HOME environment variable  is  set,  and  just  "id_dsa.pub"  in  the
              current  directory  if  HOME  is not set.  (Added in 7.16.1) If an empty string is passed, libcurl
              will pass no public key to libssh2 which then tries to compute it from the private  key,  this  is
              known to work when libssh2 1.4.0+ is linked against OpenSSL. (Added in 7.26.0)

       CURLOPT_SSH_PRIVATE_KEYFILE
              Pass  a  char  *  pointing  to  a file name for your private key. If not used, libcurl defaults to
              $HOME/.ssh/id_dsa if the HOME environment variable is  set,  and  just  "id_dsa"  in  the  current
              directory  if  HOME  is  not  set.   If  the  file  is  password-protected,  set the password with
              CURLOPT_KEYPASSWD. (Added in 7.16.1)

       CURLOPT_SSH_KNOWNHOSTS
              Pass a pointer to a zero terminated string holding the file name of the known_host  file  to  use.
              The  known_hosts  file should use the OpenSSH file format as supported by libssh2. If this file is
              specified, libcurl will only accept connections with hosts that are  known  and  present  in  that
              file,  with  a  matching  public key. Use CURLOPT_SSH_KEYFUNCTION to alter the default behavior on
              host and key (mis)matching. (Added in 7.19.6)

       CURLOPT_SSH_KEYFUNCTION
              Pass a pointer to a curl_sshkeycallback function. It gets called when the known_host matching  has
              been  done,  to  allow  the application to act and decide for libcurl how to proceed. The callback
              will only be called if CURLOPT_SSH_KNOWNHOSTS is also set.

              The curl_sshkeycallback function gets passed the CURL handle, the key from the  known_hosts  file,
              the  key  from the remote site, info from libcurl on the matching status and a custom pointer (set
              with CURLOPT_SSH_KEYDATA). It MUST return one of the following return codes to tell libcurl how to
              act:

              CURLKHSTAT_FINE_ADD_TO_FILE
                     The host+key is accepted and  libcurl  will  append  it  to  the  known_hosts  file  before
                     continuing  with  the  connection.  This will also add the host+key combo to the known_host
                     pool kept in memory if it wasn't already present there. The adding of data to the  file  is
                     done  by completely replacing the file with a new copy, so the permissions of the file must
                     allow this.

              CURLKHSTAT_FINE
                     The host+key is accepted libcurl will continue with the connection. This will also add  the
                     host+key combo to the known_host pool kept in memory if it wasn't already present there.

              CURLKHSTAT_REJECT
                     The  host+key  is  rejected.  libcurl  will  deny the connection to continue and it will be
                     closed.

              CURLKHSTAT_DEFER
                     The host+key is rejected, but the SSH connection is asked to be kept alive.   This  feature
                     could  be  used when the app wants to somehow return back and act on the host+key situation
                     and then retry without needing the overhead of setting it up from scratch again.
        (Added in 7.19.6)

       CURLOPT_SSH_KEYDATA
              Pass a void * as parameter. This pointer will be passed along verbatim to the  callback  set  with
              CURLOPT_SSH_KEYFUNCTION. (Added in 7.19.6)

OTHER OPTIONS

       CURLOPT_PRIVATE
              Pass a void * as parameter, pointing to data that should be associated with this curl handle.  The
              pointer can subsequently be retrieved using curl_easy_getinfo(3) with the CURLINFO_PRIVATE option.
              libcurl itself does nothing with this data. (Added in 7.10.3)

       CURLOPT_SHARE
              Pass  a share handle as a parameter. The share handle must have been created by a previous call to
              curl_share_init(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 in multiple threads, you MUST use the locking methods  in
              the share handle. See curl_share_setopt(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 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.

       CURLOPT_NEW_FILE_PERMS
              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)

       CURLOPT_NEW_DIRECTORY_PERMS
              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 protocols that can use this are sftp://, scp://, and file://.  (Added in 7.16.4)

TELNET OPTIONS

       CURLOPT_TELNETOPTIONS
              Provide a pointer to a curl_slist with variables to pass to the telnet negotiations. The variables
              should be in the format <option=value>. libcurl  supports  the  options  'TTYPE',  'XDISPLOC'  and
              'NEW_ENV'. See the TELNET standard for details.

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_FAILED_INIT.

SEE ALSO

       curl_easy_init(3), curl_easy_cleanup(3), curl_easy_reset(3)

libcurl 7.20.0                                     1 Jan 2010                                curl_easy_setopt(3)