libcurl
libcurl(3) libcurl overview libcurl(3)
NAME
libcurl - client-side URL transfers
DESCRIPTION
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 handle. 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 trans-
fer, 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 transfers
using the same handle. See the chapter below for Persistant Connec-
tions.
There is also a series of other helpful functions to use. They are:
curl_version()
displays the libcurl version
curl_getdate()
converts a date string to time_t
curl_getenv()
portable environment variable reader
curl_easy_getinfo()
get information about a performed transfer
curl_formadd()
helps building a HTTP form POST
curl_formfree()
free a list built with curl_formparse()/curl_formadd()
curl_slist_append()
builds a linked list
curl_slist_free_all()
frees a whole curl_slist
curl_mprintf()
portable printf() functions
curl_strequal()
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 per-
formed.
curl-config is added to make it easier for applications to link with
libcurl and developers 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!
PORTABILITY
libcurl works exactly the same, on any of the platforms it compiles and
builds on.
THREADS
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.
PERSISTANT CONNECTIONS
Persistent connections means that libcurl can re-use the same connec-
tion 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 transfer, 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 forgotten.
Note that the options set with curl_easy_setopt() will be used in on
every repeat curl_easy_perform() call
libcurl 7.9.6 19 March 2002 libcurl(3)