aboutsummaryrefslogtreecommitdiff
path: root/docs/LIBCURL
blob: d2b85bc78106ad1afae99109c0f9fe7eb1466361 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
                         _ _ _                     _ 
                        | (_) |__   ___ _   _ _ __| |
                        | | | '_ \ / __| | | | '__| |
                        | | | |_) | (__| |_| | |  | |
                        |_|_|_.__/ \___|\__,_|_|  |_|

                   How To Use Libcurl In Your C/C++ Program

 [ libcurl can be used directly from within your PHP or Perl programs as well,
   look elsewhere for documentation on this ]

 The interface is meant to be very simple for applictions/programmers, hence
 the name "easy". We have therefore minimized the number of entries.

The Easy Interface

 When using the easy interface, you init your session and get a handle, which
 you use as input to the following interface functions you use. Use
 curl_easy_init() to get the handle.

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

 After the transfer has been made, you cleanup the session with
 curl_easy_cleanup() and libcurl is entirely off the hook! If you want
 persistant connections, you don't cleanup immediately, but instead run ahead
 and perform other transfers. See the chapter below for Persistant
 Connections.

 While the above mentioned four functions are the main functions to use in the
 easy interface, there is 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_formparse()      - helps building a HTTP form POST
   curl_formfree()       - free a list built with curl_formparse()
   curl_slist_append()   - builds a linked list
   curl_slist_free_all() - frees a whole curl_slist

 For details on these, read the separate man pages.

Portability

 libcurl works *exactly* the same, on any of the platforms it compiles and
 builds on.

 There's only one caution, and that is the win32 platform that may(*) require
 you to init the winsock stuff before you use the libcurl functions. Details
 on this are noted on the curl_easy_init() man page.

 (*) = it appears users of the cygwin environment gets this done
       automatically.

Persistant Connections

 With libcurl 7.7, persistant connections were added. Persistant connections
 means that libcurl can re-use the same connection for several transfers, if
 the conditions are right.

 libcurl will *always* attempt to use persistant 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 persistant 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

Compatibility with older libcurls

 Repeated curl_easy_perform() calls on the same handle were not supported in
 pre-7.7 versions, and caused confusion and defined behaviour.