libcurl(3) libcurl overview libcurl(3)
libcurl - client-side URL transfers
This is an overview on how to use libcurl in your C programs. There are specific man pages
for each function mentioned in here. There's also the libcurl-the-guide document for a
complete tutorial to programming with libcurl.
There are a dozen custom bindings that bring libcurl access to your favourite language.
Look elsewhere for documentation on those.
All applications that use libcurl should call curl_global_init() exactly once before any
libcurl function can be used. After all usage of libcurl is complete, it must call
curl_global_cleanup(). In between those two calls, you can use libcurl as described below.
When using libcurl's "easy" interface you init your session and get a handle, which you
use as input to the easy interface functions you use. Use curl_easy_init() to get the han-
dle. There is also the so called "multi" interface, try the libcurl-multi(3) man page for
an overview of that.
You continue by setting all the options you want in the upcoming transfer, most important
among them is the URL itself (you can't transfer anything without a specified URL as you
may have figured out yourself). You might want to set some callbacks as well that will be
called from the library when data is available etc. curl_easy_setopt() is there for this.
When all is setup, you tell libcurl to perform the transfer using curl_easy_perform(). It
will then do the entire operation and won't return until it is done (successfully or not).
After the transfer has been made, you can set new options and make another transfer, or if
you're done, cleanup the session by calling curl_easy_cleanup(). If you want persistant
connections, you don't cleanup immediately, but instead run ahead and perform other trans-
fers using the same handle. See the chapter below for Persistant Connections.
There is also a series of other helpful functions to use. They are:
displays the libcurl version
converts a date string to time_t
portable environment variable reader
get information about a performed transfer
helps building a HTTP form POST
free a list built with curl_formparse()/curl_formadd()
builds a linked list
frees a whole curl_slist
portable printf() functions
portable case insensitive string comparisons
LINKING WITH LIBCURL
On unix-like machines, there's a tool named curl-config that gets installed with the rest
of the curl stuff when 'make install' is performed.
curl-config is added to make it easier for applications to link with libcurl and develop-
ers to learn about libcurl and how to use it.
Run 'curl-config --libs' to get the (additional) linker options you need to link with the
particular version of libcurl you've installed.
For details, see the curl-config.1 man page.
LIBCURL SYMBOL NAMES
All public functions in the libcurl interface are prefixed with 'curl_' (with a lowercase
c). You can find other functions in the library source code, but other prefixes indicate
the functions are private and may change without further notice in the next release.
Only use documented functions and functionality!
libcurl works exactly the same, on any of the platforms it compiles and builds on.
Never ever call curl-functions simultaneously using the same handle from several threads.
libcurl is thread-safe and can be used in any number of threads, but you must use separate
curl handles if you want to use libcurl in more than one thread simultaneously.
Persistent connections means that libcurl can re-use the same connection for several
transfers, if the conditions are right.
libcurl will *always* attempt to use persistent connections. Whenever you use
curl_easy_perform(), libcurl will attempt to use an existing connection to do the trans-
fer, and if none exists it'll open a new one that will be subject for re-use on a possible
following call to curl_easy_perform().
To allow libcurl to take full advantage of persistent connections, you should do as many
of your file transfers as possible using the same curl handle. When you call
curl_easy_cleanup(), all the possibly open connections held by libcurl will be closed and
Note that the options set with curl_easy_setopt() will be used in on every repeat
libcurl 7.9.6 19 March 2002 libcurl(3)