DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

curl_easy_setopt(3)




curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)


NAME

     curl_easy_setopt - set options for a curl easy handle


SYNOPSIS

     #include <curl/curl.h>

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


DESCRIPTION

     curl_easy_setopt() 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 forth-
     coming  transfers  performed using this handle.  The options
     are not in any way reset between transfers, so if  you  want
     subsequent transfers with different options, you must change
     them between the transfers. You  can  optionally  reset  all
     options back to internal default with curl_easy_reset(3).

     Strings passed to libcurl as 'char *' arguments, will not be
     copied  by  the library. Instead you should keep them avail-
     able until libcurl no longer needs them. Failing  to  do  so
     will  cause  very odd behavior or even crashes. libcurl will
     need them until you call curl_easy_cleanup(3) or you set the
     same option again to use a different pointer.

     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 non-zero to  get  the  library  to
          display  a  lot of verbose information about its opera-
          tions. Very useful for libcurl and/or  protocol  debug-
          ging and understanding. The verbose information will be
          sent to stderr, or the stream set with CURLOPT_STDERR.

          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

libcurl 7.14.2      Last change: 27 Oct 2005                    1

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          A non-zero parameter 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).

     CURLOPT_NOPROGRESS
          A non-zero parameter tells the library to shut off  the
          built-in progress meter completely.

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

     CURLOPT_NOSIGNAL
          Pass a long. If it is non-zero, libcurl  will  not  use
          any functions that install signal handlers or any func-
          tions that cause signals to be  sent  to  the  process.
          This option is mainly here to allow multi-threaded unix
          applications to still set/use all timeout options  etc,
          without risking getting signals.  (Added in 7.10)

          Consider building libcurl with ares support  to  enable
          asynchronous  DNS lookups. It enables nice timeouts for
          name resolves without signals.


CALLBACK OPTIONS

     CURLOPT_WRITEFUNCTION
          Function pointer that should match the following proto-
          type:  size_t  function( void *ptr, size_t size, size_t
          nmemb, void *stream); This function gets called by lib-
          curl as soon as there is data received that needs to be
          saved. The size of the data pointed to by ptr  is  size
          multiplied  with nmemb, it will not be zero terminated.
          Return the number of bytes actually taken care  of.  If
          that  amount  differs  from  the  amount passed to your
          function, it'll signal an error to the library  and  it
          will abort the transfer and return CURLE_WRITE_ERROR.

          This function may be called with zero bytes data if the
          transfered 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  stream  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  data  that can be
          passed to the write callback is defined in  the  curl.h

libcurl 7.14.2      Last change: 27 Oct 2005                    2

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          header file: CURL_MAX_WRITE_SIZE.

     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  call-
          back,  you  must  pass  a 'FILE *' as libcurl will pass
          this to fwrite() when writing data.

          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
          Function pointer that should match the following proto-
          type:  size_t  function( void *ptr, size_t size, size_t
          nmemb, void *stream); This function gets called by lib-
          curl  as soon as it needs to read data in order to send
          it to the peer. The data area pointed at by the pointer
          ptr  may  be  filled  with at most size multiplied with
          nmemb number of bytes. Your function  must  return  the
          actual  number  of bytes that you stored in that memory
          area.  Returning  0  will  signal  end-of-file  to  the
          library and cause it to stop the current transfer.

          If you stop the current transfer by returning  0  "pre-
          maturely" (i.e before the server expected it, like when
          you've told 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)

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

     CURLOPT_READDATA
          Data pointer to pass to the file read function. If  you

libcurl 7.14.2      Last change: 27 Oct 2005                    3

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

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

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

          This  option  is  also  known  with  the   older   name
          CURLOPT_INFILE,  the  name  CURLOPT_READDATA was intro-
          duced in 7.9.7.

     CURLOPT_IOCTLFUNCTION
          Function    pointer    that    should     match     the
          curl_ioctl_callback  prototype  found in <curl/curl.h>.
          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.  (Opion added in 7.12.3)

     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.  (Option added in 7.12.3)

     CURLOPT_PROGRESSFUNCTION
          Function    pointer    that    should     match     the
          curl_progress_callback      prototype      found     in
          <curl/curl.h>. This function  gets  called  by  libcurl
          instead  of  its  internal  equivalent  with a frequent
          interval during data transfer.  Unknown/unused argument
          values  will  be set to zero (like if you only download
          data, the upload size will remain 0). Returning a  non-
          zero  value  from  this  callback will cause libcurl to
          abort       the       transfer        and        return
          CURLE_ABORTED_BY_CALLBACK.

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

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

     CURLOPT_HEADERFUNCTION
          Function pointer that should match the following proto-
          type:  size_t  function( void *ptr, size_t size, size_t

libcurl 7.14.2      Last change: 27 Oct 2005                    4

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          nmemb, void *stream);. This  function  gets  called  by
          libcurl  as  soon  as  it has received header data. The
          header callback will be called once for each header and
          only  complete  header lines are passed on to the call-
          back. Parsing headers should be easy enough using this.
          The  size  of the data pointed to by ptr is size multi-
          plied with nmemb. Do not assume that the header line is
          zero  terminated!  The  pointer named stream is the one
          you set with the CURLOPT_WRITEHEADER option. The  call-
          back  function must return the number of bytes actually
          taken care of, or return -1  to  signal  error  to  the
          library  (it will cause it to abort the transfer with a
          CURLE_WRITE_ERROR return code).

          Since 7.14.1: 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
          response-headers mention what header to expect  in  the
          trailer.

     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 your own callback to
          take  care of the writing, this must be a valid FILE *.
          See also the CURLOPT_HEADERFUNCTION option above on how
          to set a custom get-all-headers callback.

     CURLOPT_DEBUGFUNCTION
          Function pointer that should match the following proto-
          type:  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 ter-
          minated, 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

libcurl 7.14.2      Last change: 27 Oct 2005                    5

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

               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
          Function pointer that should match the following proto-
          type: CURLcode sslctxfun(CURL *curl, void *sslctx, void
          *parm); This  function  gets  called  by  libcurl  just
          before  the  initialization  of an 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  argu-
          ment  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. Using this func-
          tion allows for example to use openssl callbacks to add
          additional  validation  code for certificates, and even
          to change the actual URI of an 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)

libcurl 7.14.2      Last change: 27 Oct 2005                    6

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)


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.

          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 non-zero parameter tells the library to fail silently
          if  the  HTTP  code returned is equal to or larger than
          300. The default action would be  to  return  the  page
          normally, ignoring that code.


NETWORK OPTIONS

     CURLOPT_URL
          The actual URL to deal with. The parameter should be  a
          char  *  to  a  zero terminated string. The string must
          remain present until curl no longer  needs  it,  as  it
          doesn't copy the string.

          If the given URL lacks the protocol part ("http://"  or
          "ftp://"  etc), it will attempt to guess which protocol
          to use based on the given host name. If the given  pro-
          tocol  of  the  set  URL is not supported, libcurl will
          return on error (CURLE_UNSUPPORTED_PROTOCOL)  when  you
          call curl_easy_perform(3) or curl_multi_perform(3). Use
          curl_version_info(3) for detailed info on which  proto-
          cols that are supported.

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

     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

libcurl 7.14.2      Last change: 27 Oct 2005                    7

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          any  such  prefix  will  be  ignored.  The proxy's port
          number may optionally be specified  with  the  separate
          option CURLOPT_PROXYPORT.

          When you tell the library to use an 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 tunnel-
          ing is activated with CURLOPT_HTTPPROXYTUNNEL.

          libcurl respects the environment variables  http_proxy,
          ftp_proxy,  all_proxy  etc, if any of those is set. The
          CURLOPT_PROXY option does however override any possibly
          set environment variables.

          Starting with 7.14.1, the  proxy  host  string  can  be
          specified  the  exact same way as the proxy environment
          variables, include protocol prefix (http://) and embed-
          ded user + password.

     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  and
          CURLPROXY_SOCKS5, with  the  HTTP  one  being  default.
          (Added in 7.10)

     CURLOPT_HTTPPROXYTUNNEL
          Set the parameter to non-zero to  get  the  library  to
          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_INTERFACE
          Pass a char * as parameter. This set the interface name
          to  use  as outgoing network interface. The name can be
          an interface name, an IP address or a host name.

     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 (0) to completely disable caching,
          or set to -1 to make the cached entries remain forever.
          By default, libcurl caches this info for 60 seconds.

libcurl 7.14.2      Last change: 27 Oct 2005                    8

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

     CURLOPT_DNS_USE_GLOBAL_CACHE
          Pass a long. If the value is non-zero, 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 makse sense to use
          this option if you want it smaller.

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

     CURLOPT_TCP_NODELAY
          Pass a long specifying whether the  TCP_NODELAY  option
          should  be  set  or  cleared  (1 = set, 0 = clear). The
          option is cleared by default. This will have no  effect
          after the connection has been established.

          Setting this option will disable TCP's Nagle algorithm.
          The purpose of this algorithm is to try to minimize the
          number of small packets on the  network  (where  "small
          packets"  means TCP segments less than the Maximum Seg-
          ment Size (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 net-
          work if overdone.


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

libcurl 7.14.2      Last change: 27 Oct 2005                    9

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          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 with the host and  user  name
               (to find the password only) or with the host only,
               to find the first user  name  and  password  after
               that machine, which ever information is not speci-
               fied in the URL.

               Undefined values of  the  option  will  have  this
               effect.

          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 with 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  pro-
     perties  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  ter-
          minated  string  containing  the  full path name to the
          file you want libcurl to use as .netrc  file.  If  this
          option  is  omitted,  and CURLOPT_NETRC is set, libcurl
          will attempt to find the a .netrc file in  the  current
          user's home directory. (Added in 7.10.9)

     CURLOPT_USERPWD
          Pass a char *  as  parameter,  which  should  be  [user
          name]:[password]   to   use  for  the  connection.  Use
          CURLOPT_HTTPAUTH to decide authentication method.

          When using NTLM, you can set domain by prepending it to
          the user name and separating the domain and name with a

libcurl 7.14.2      Last change: 27 Oct 2005                   10

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          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  lib-
          curl  follows locations to other hosts it will not send
          the user and password to those.  This  is  enforced  to
          prevent accidental information leakage.

     CURLOPT_PROXYUSERPWD
          Pass a char *  as  parameter,  which  should  be  [user
          name]:[password]  to use for the connection to the HTTP
          proxy.  Use CURLOPT_PROXYAUTH to decide  authentication
          method.

     CURLOPT_HTTPAUTH
          Pass a long as parameter, which is set to a bitmask, to
          tell  libcurl what 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 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_USERPWD option. (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  is
               sending  the  user name and password over the net-
               work 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_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 be also  used
               along  with  another  authentication  methods. For
               more  information  see  IETF  draft  draft-brezak-

libcurl 7.14.2      Last change: 27 Oct 2005                   11

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

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

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

          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.

     CURLOPT_PROXYAUTH
          Pass a long as parameter, which is set to a bitmask, to
          tell  libcurl what 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. As of this writing, only Basic, Digest and NTLM
          work. (Added in 7.10.7)


HTTP OPTIONS

     CURLOPT_AUTOREFERER
          Pass a non-zero parameter to enable this. When enabled,
          libcurl  will  automatically  set the Referer: field in
          requests where it follows a Location:  redirect.

     CURLOPT_ENCODING
          Sets the contents of the Accept-Encoding:  header  sent
          in  an HTTP request, and enables decoding of a response
          when a Content-Encoding:  header  is  received.   Three
          encodings  are supported: identity, which does nothing,

libcurl 7.14.2      Last change: 27 Oct 2005                   12

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          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.

     CURLOPT_FOLLOWLOCATION
          A non-zero parameter tells the library  to  follow  any
          Location:  header  that  the server sends as part of an
          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.

     CURLOPT_UNRESTRICTED_AUTH
          A non-zero parameter 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_PUT
          A non-zero parameter 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 non-zero parameter tells the library to do a  regular
          HTTP  post.  This  will also make the library use the a
          "Content-Type:       application/x-www-form-urlencoded"
          header.  (This  is  by  far the most commonly used POST

libcurl 7.14.2      Last change: 27 Oct 2005                   13

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          method).

          Use the CURLOPT_POSTFIELDS option to specify what  data
          to post and CURLOPT_POSTFIELDSIZE 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 call-
          back, you must  transmit  it  using  chunked  transfer-
          encoding  or you must set the size of the data with the
          CURLOPT_POSTFIELDSIZE option.

          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 a non-zero value, 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
          explictly set the new request type using CURLOPT_NOBODY
          or CURLOPT_HTTPGET or similar.

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

          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.

          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.

libcurl 7.14.2      Last change: 27 Oct 2005                   14

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          To make multipart/formdata posts  (aka  rfc1867-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_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  parame-
          ter.  It will be used to set the Referer: header in the
          http request sent to the remote  server.  This  can  be
          used  to  fool servers or scripts. You can also set any
          custom header with CURLOPT_HTTPHEADER.

     CURLOPT_USERAGENT
          Pass a pointer to a zero terminated string  as  parame-
          ter.  It  will be used to set the User-Agent: header in
          the http request sent to the remote server. This can be
          used  to  fool servers or scripts. You can also set any
          custom header with 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

libcurl 7.14.2      Last change: 27 Oct 2005                   15

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          should be a  fully  valid  list  of  struct  curl_slist
          structs properly filled in. Use curl_slist_append(3) to
          create the list and curl_slist_free_all(3) to clean  up
          an  entire  list. If you add a header that is otherwise
          generated and used by libcurl  internally,  your  added
          one  will  be used instead. If you add a header with no
          contents as in 'Accept:' (no data on the right side  of
          the  colon),  the  internally used header will get dis-
          abled. Thus, using this option you can add new headers,
          replace  internal  headers and remove internal headers.
          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 (usually containing  a  GET
          or  POST)  is not a header and cannot be replaced using
          this option. Only the lines following the  request-line
          are headers.

          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  exam-
          ple,  IceCast  servers  respond  with "ICY 200 OK".  By
          including this string in  your  list  of  aliases,  the
          response  will  be  treated as a valid 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.
          So  if  your  alias  is  "MYHTTP/9.9", Libcurl will not
          treat the server as responding with HTTP  version  9.9.
          Instead  Libcurl  will  use  the  value  set  by option
          CURLOPT_HTTP_VERSION.

     CURLOPT_COOKIE
          Pass a pointer to a zero terminated string  as  parame-
          ter.  It  will  be  used  to  set  a cookie in the http
          request.  The  format   of   the   string   should   be
          NAME=CONTENTS,  where  NAME  is  the  cookie  name  and

libcurl 7.14.2      Last change: 27 Oct 2005                   16

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          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.

          Using this option multiple times  will  only  make  the
          latest string override the previously ones.

     CURLOPT_COOKIEFILE
          Pass a pointer to a zero terminated string  as  parame-
          ter.  It  should  contain the name of your file holding
          cookie data to read. The cookie data may be in Netscape
          / Mozilla cookie data format or just regular 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 request.

          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 ses-
          sion, so if you for example follow a location  it  will
          make matching cookies get sent accordingly.

          If the cookie jar file can't be created or  written  to
          (when the 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  feed-
          back you get about this possibly lethal situation.

     CURLOPT_COOKIESESSION
          Pass a long set to non-zero  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  are  not. Session cookies are cookies

libcurl 7.14.2      Last change: 27 Oct 2005                   17

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          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)

     CURLOPT_HTTPGET
          Pass a long. If the long is non-zero, this  forces  the
          HTTP  request  to  get  back  to GET. usable if a POST,
          HEAD, PUT or a custom request have been used previously
          using the same curl handle.

          When setting CURLOPT_HTTPGET to a  non-zero  value,  it
          will  automatically  set  CURLOPT_NOBODY  to  0  (since
          7.14.1).

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

          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)


FTP OPTIONS

     CURLOPT_FTPPORT
          Pass a pointer to a zero terminated string  as  parame-
          ter.  It  will be used to get the IP address to use for
          the ftp PORT instruction. The  PORT  instruction  tells
          the  remote  server  to  connect  to  our  specified IP

libcurl 7.14.2      Last change: 27 Oct 2005                   18

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          address. The string may be a plain IP address,  a  host
          name,  an network interface name (under Unix) or just a
          '-' letter to let the library use your systems  default
          IP  address.  Default  FTP  operations are passive, and
          thus won't use PORT.

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

     CURLOPT_QUOTE
          Pass a pointer to a linked list of FTP commands to pass
          to  the  server prior to your ftp request. This will be
          done before any other FTP  commands  are  issued  (even
          before  the  CWD  command). The linked list should be a
          fully valid list of 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.

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

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

          This causes an FTP NLST command  to  be  sent.   Beware
          that some FTP servers list only files in their response
          to NLST; they might not include subdirectories and sym-
          bolic links.

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

     CURLOPT_FTP_USE_EPRT

libcurl 7.14.2      Last change: 27 Oct 2005                   19

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          Pass a long. If the value is non-zero, 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  FALSE
          (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 non-zero, 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 FALSE (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_CREATE_MISSING_DIRS
          Pass a long.  If  the  value  is  non-zero,  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)

     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  over-
          rides  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_SKIP_PASV_IP
          Pass a long. If set to a non-zero value,  it  instructs
          libcurl  to  not use the IP address the server suggests
          in its 227-response to libcurl's PASV command when lib-
          curl connects the data connection. Instead libcurl will
          re-use the same IP address it already uses for the con-
          trol  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_FTP_SSL

libcurl 7.14.2      Last change: 27 Oct 2005                   20

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

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

          CURLFTPSSL_NONE
               Don't attempt to use SSL.

          CURLFTPSSL_TRY
               Try using SSL, proceed as normal otherwise.

          CURLFTPSSL_CONTROL
               Require SSL for the  control  connection  or  fail
               with CURLE_FTP_SSL_FAILED.

          CURLFTPSSL_ALL
               Require SSL for all  communication  or  fail  with
               CURLE_FTP_SSL_FAILED.

     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_FTP_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_SOURCE_URL
          When set, it enables a FTP third party transfer,  using
          the set URL as source, while CURLOPT_URL is the target.

     CURLOPT_SOURCE_USERPWD
          Set "username:password" to use for the  source  connec-
          tion when doing FTP third party transfers.

     CURLOPT_SOURCE_QUOTE
          Exactly like CURLOPT_QUOTE, but for the source host.

     CURLOPT_SOURCE_PREQUOTE
          Exactly like CURLOPT_PREQUOTE, but for the source host.

     CURLOPT_SOURCE_POSTQUOTE
          Exactly like  CURLOPT_POSTQUOTE,  but  for  the  source
          host.

libcurl 7.14.2      Last change: 27 Oct 2005                   21

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

     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)


PROTOCOL OPTIONS

     CURLOPT_TRANSFERTEXT
          A non-zero parameter 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 simi-
          lar.

          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 sim-
          ply  sets  the  mode  to  ascii and performs a standard
          transfer.

     CURLOPT_CRLF
          Convert Unix newlines to CRLF newlines on transfers.

     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 docu-
          ment in pieces (using standard  MIME  separation  tech-
          niques).  Pass a NULL to this option to disable the use
          of ranges.

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

     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  parame-
          ter.  It will be user instead of GET or HEAD when doing
          an HTTP request, or instead of LIST or NLST when  doing

libcurl 7.14.2      Last change: 27 Oct 2005                   22

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          an  ftp  directory  listing.  This  is useful for doing
          DELETE or other more or  less  obscure  HTTP  requests.
          Don't  do  this at will, make sure your server supports
          the command first.

          Restore to the internal  default  by  setting  this  to
          NULL.

          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.

     CURLOPT_FILETIME
          Pass a long. If it is a non-zero  value,  libcurl  will
          attempt  to  get  the  modification  date of the remote
          document in this  operation.  This  requires  that  the
          remote  server  sends  the  time  or  replies to a time
          querying  command.  The  curl_easy_getinfo(3)  function
          with the CURLINFO_FILETIME argument can be used after a
          transfer to extract the received time (if any).

     CURLOPT_NOBODY
          A non-zero parameter tells the library to  not  include
          the  body-part in the output. This is only relevant for
          protocols that have 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.

     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)

     CURLOPT_UPLOAD
          A non-zero parameter tells the library to  prepare  for

libcurl 7.14.2      Last change: 27 Oct 2005                   23

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          an upload. The CURLOPT_READDATA and CURLOPT_INFILESIZEE
          or CURLOPT_INFILESIZE_LARGE 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 down-
          load. 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 and FTP.

          The last modification time of  a  file  is  not  always
          known  and  in such instances this feature will have no
          effect even if the given time condition would have  not
          been met.

libcurl 7.14.2      Last change: 27 Oct 2005                   24

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

     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.

     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_MAXCONNECTS
          Pass a long. The set number will be the persistent con-
          nection  cache size. The set amount will be the maximum
          amount of simultaneously open connections that  libcurl
          may  cache. Default is 5, and there isn't much point in
          changing this value unless you are perfectly  aware  of
          how  this  work  and  changes libcurl's behaviour. This
          concerns connection using any  of  the  protocols  that
          support persistent connections.

          When  reaching  the  maximum  limit,  curl   uses   the
          CURLOPT_CLOSEPOLICY to figure out which of the existing
          connections to close to prevent the number of open con-
          nections to increase.

          If you already have performed transfers with this  curl
          handle,  setting  a smaller MAXCONNECTS than before may
          cause open connections to get closed unnecessarily.

     CURLOPT_CLOSEPOLICY
          Pass a long.  This  option  sets  what  policy  libcurl
          should  use when the connection cache is filled and one

libcurl 7.14.2      Last change: 27 Oct 2005                   25

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          of the open connections has to be closed to  make  room
          for  a  new  connection.  This must be one of the CURL-
          CLOSEPOLICY_*               defines.                Use
          CURLCLOSEPOLICY_LEAST_RECENTLY_USED   to  make  libcurl
          close the connection that was least recently used, that
          connection  is  also  least likely to be capable of re-
          use. Use CURLCLOSEPOLICY_OLDEST to make  libcurl  close
          the  oldest  connection, the one that was created first
          among the ones in the connection cache. The other close
          policies are not support yet.

     CURLOPT_FRESH_CONNECT
          Pass a long. Set to non-zero to make the next  transfer
          use  a  new (fresh) connection by force. If the connec-
          tion 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 non-zero to make the next  transfer
          explicitly  close  the  connection when done. Normally,
          libcurl keep all connections alive when done  with  one
          transfer  in case there comes a succeeding one that can
          re-use them.  This option should be used  with  caution
          and  only  if  you understand what it does. Set to 0 to
          have libcurl keep  the  connection  open  for  possibly
          later re-use (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 disable connection timeout (it will  then  only
          timeout  on  the  system's internal timeouts). See also
          the CURLOPT_TIMEOUT option.

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

     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

libcurl 7.14.2      Last change: 27 Oct 2005                   26

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

               that your system allows.

          CURL_IPRESOLVE_V4
               Resolve to ipv4 addresses.

          CURL_IPRESOLVE_V6
               Resolve to ipv6 addresses.


SSL and SECURITY OPTIONS

     CURLOPT_SSLCERT
          Pass a pointer to a zero terminated string  as  parame-
          ter.  The string should be the file name of your certi-
          ficate. The default format is "PEM" and can be  changed
          with CURLOPT_SSLCERTTYPE.

     CURLOPT_SSLCERTTYPE
          Pass a pointer to a zero terminated string  as  parame-
          ter.  The  string should be the format of your certifi-
          cate. Supported formats are "PEM" and "DER".  (Added in
          7.9.3)

     CURLOPT_SSLCERTPASSWD
          Pass a pointer to a zero terminated string  as  parame-
          ter.  It  will  be used as the password required to use
          the CURLOPT_SSLCERT certificate.

          This option is  replaced  by  CURLOPT_SSLKEYPASSWD  and
          should  only  be  used  for backward compatibility. You
          never needed a pass phrase to load  a  certificate  but
          you need one to load your private key.

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

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

          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_SSLKEYPASSWD
          Pass a pointer to a zero terminated string  as  parame-
          ter.  It  will  be used as the password required to use

libcurl 7.14.2      Last change: 27 Oct 2005                   27

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          the CURLOPT_SSLKEY private key.

     CURLOPT_SSLENGINE
          Pass a pointer to a zero terminated string  as  parame-
          ter.  It  will be used as the identifier for the crypto
          engine you want to use for your private key.

          If   the    crypto    device    cannot    be    loaded,
          CURLE_SSL_ENGINE_NOTFOUND is returned.

     CURLOPT_SSLENGINE_DEFAULT
          Sets the actual crypto engine as the default for (asym-
          metric) crypto operations.

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

     CURLOPT_SSLVERSION
          Pass a long as parameter to  control  what  version  of
          SSL/TLS to attempt to use.  The available options are:

          CURL_SSLVERSION_DEFAULT
               The  default  action.  When  libcurl  built   with
               OpenSSL,  this  will  attempt  to  figure  out the
               remote SSL protocol version.  Unfortunately  there
               are  a  lot  of  ancient and broken servers in use
               which cannot handle this technique and  will  fail
               to  connect.  When  libcurl  is built with GnuTLS,
               this will mean SSLv3.

          CURL_SSLVERSION_TLSv1
               Force TLSv1

          CURL_SSLVERSION_SSLv2
               Force SSLv2

          CURL_SSLVERSION_SSLv3
               Force SSLv3

     CURLOPT_SSL_VERIFYPEER
          Pass a long as parameter.

          This  option  determines  whether  curl  verifies   the
          authenticity  of  the  peer's  certificate.   A nonzero
          value means curl verifies; zero means it doesn't.   The
          default is nonzero, but before 7.10, it was zero.

          When negotiating an 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

libcurl 7.14.2      Last change: 27 Oct 2005                   28

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          signatures, rooted in certification authority (CA) cer-
          tificates you supply.  As  of  7.10,  curl  installs  a
          default  bundle  of CA certificates and you can specify
          alternate certificates with the  CURLOPT_CAINFO  option
          or the CURLOPT_CAPATH option.

          When CURLOPT_SSL_VERIFYPEER is nonzero, and the verifi-
          cation  fails  to prove that the certificate is authen-
          tic, the connection fails.  When the  option  is  zero,
          the connection succeeds regardless.

          Authenticating the certificate is not  by  itself  very
          useful.   You typically want to ensure that the server,
          as authentically identified by its certificate, is  the
          server    you    mean    to   be   talking   to.    Use
          CURLOPT_SSL_VERIFYHOST to control that.

     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.

     CURLOPT_CAPATH
          Pass a char * to a  zero  terminated  string  naming  a
          directory  holding  multiple  CA certificates to verify
          the  peer  with.  The  certificate  directory  must  be
          prepared using the openssl 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. (Added in 7.9.8)

     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_VERIFYHOST
          Pass a long as parameter.

          This option determines whether  libcurl  verifies  that

libcurl 7.14.2      Last change: 27 Oct 2005                   29

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          the server cert is for the server it is known as.

          When negotiating an 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, the  certificate  must  contain  a
          Common  Name  field, but it doesn't matter what name it
          says.  (This is not ordinarily a useful setting).

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

          The default, since 7.10, is 2.

          The checking this option controls is  of  the  identity
          that the server claims.  The server could be lying.  To
          control lying, see CURLOPT_SSL_VERIFYPEER.

     CURLOPT_SSL_CIPHER_LIST
          Pass a char *, pointing to  a  zero  terminated  string
          holding  the list of ciphers to use for the SSL connec-
          tion. The list must be syntactically correct,  it  con-
          sists  of  one  or  more  cipher  strings  separated by
          colons. Commas or spaces are also acceptable separators
          but  colons are normally used, , - and + can be used as
          operators.  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

     CURLOPT_KRB4LEVEL
          Pass a char *  as  parameter.  Set  the  krb4  security
          level,  this  also  enables  krb4 awareness.  This is a
          string, 'clear', 'safe', 'confidential'  or  'private'.
          If  the  string  is set but doesn't match one of these,
          'private' will be used. Set the string to NULL to  dis-
          able  kerberos4.  The  kerberos  support only works for
          FTP.


OTHER OPTIONS

     CURLOPT_PRIVATE

libcurl 7.14.2      Last change: 27 Oct 2005                   30

curl_easy_setopt(3)      libcurl Manual       curl_easy_setopt(3)

          Pass a char *  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, you MUST use the  locking  methods
          in  the  share  handle.  See  curl_share_setopt(3)  for
          details.


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 TEL-
          NET 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.14.2      Last change: 27 Oct 2005                   31


Man(1) output converted with man2html