xref: /aosp_15_r20/external/curl/docs/libcurl/libcurl.md (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker---
2*6236dae4SAndroid Build Coastguard Workerc: Copyright (C) Daniel Stenberg, <[email protected]>, et al.
3*6236dae4SAndroid Build Coastguard WorkerSPDX-License-Identifier: curl
4*6236dae4SAndroid Build Coastguard WorkerTitle: libcurl
5*6236dae4SAndroid Build Coastguard WorkerSection: 3
6*6236dae4SAndroid Build Coastguard WorkerSource: libcurl
7*6236dae4SAndroid Build Coastguard WorkerSee-also:
8*6236dae4SAndroid Build Coastguard Worker  - libcurl-easy (3)
9*6236dae4SAndroid Build Coastguard Worker  - libcurl-multi (3)
10*6236dae4SAndroid Build Coastguard Worker  - libcurl-security (3)
11*6236dae4SAndroid Build Coastguard Worker  - libcurl-thread (3)
12*6236dae4SAndroid Build Coastguard WorkerProtocol:
13*6236dae4SAndroid Build Coastguard Worker  - All
14*6236dae4SAndroid Build Coastguard WorkerAdded-in: n/a
15*6236dae4SAndroid Build Coastguard Worker---
16*6236dae4SAndroid Build Coastguard Worker
17*6236dae4SAndroid Build Coastguard Worker# NAME
18*6236dae4SAndroid Build Coastguard Worker
19*6236dae4SAndroid Build Coastguard Workerlibcurl - client-side URL transfers
20*6236dae4SAndroid Build Coastguard Worker
21*6236dae4SAndroid Build Coastguard Worker# DESCRIPTION
22*6236dae4SAndroid Build Coastguard Worker
23*6236dae4SAndroid Build Coastguard WorkerThis is a short overview on how to use libcurl in your C programs. There are
24*6236dae4SAndroid Build Coastguard Workerspecific man pages for each function mentioned in here. See
25*6236dae4SAndroid Build Coastguard Workerlibcurl-easy(3), libcurl-multi(3), libcurl-share(3),
26*6236dae4SAndroid Build Coastguard Workerlibcurl-url(3), libcurl-ws(3) and libcurl-tutorial(3) for
27*6236dae4SAndroid Build Coastguard Workerin-depth understanding on how to program with libcurl.
28*6236dae4SAndroid Build Coastguard Worker
29*6236dae4SAndroid Build Coastguard WorkerThere are many bindings available that bring libcurl access to your favorite
30*6236dae4SAndroid Build Coastguard Workerlanguage. Look elsewhere for documentation on those.
31*6236dae4SAndroid Build Coastguard Worker
32*6236dae4SAndroid Build Coastguard Worker# TRANSFERS
33*6236dae4SAndroid Build Coastguard Worker
34*6236dae4SAndroid Build Coastguard WorkerTo transfer files, you create an "easy handle" using curl_easy_init(3)
35*6236dae4SAndroid Build Coastguard Workerfor a single individual transfer (in either direction). You then set your
36*6236dae4SAndroid Build Coastguard Workerdesired set of options in that handle with curl_easy_setopt(3). Options
37*6236dae4SAndroid Build Coastguard Workeryou set with curl_easy_setopt(3) stick. They are then used for every
38*6236dae4SAndroid Build Coastguard Workerrepeated use of this handle until you either change the option, or you reset
39*6236dae4SAndroid Build Coastguard Workerthem all with curl_easy_reset(3).
40*6236dae4SAndroid Build Coastguard Worker
41*6236dae4SAndroid Build Coastguard WorkerTo actually transfer data you have the option of using the "easy" interface,
42*6236dae4SAndroid Build Coastguard Workeror the "multi" interface.
43*6236dae4SAndroid Build Coastguard Worker
44*6236dae4SAndroid Build Coastguard WorkerThe easy interface is a synchronous interface with which you call
45*6236dae4SAndroid Build Coastguard Workercurl_easy_perform(3) and let it perform the transfer. When it is
46*6236dae4SAndroid Build Coastguard Workercompleted, the function returns and you can continue. More details are found in
47*6236dae4SAndroid Build Coastguard Workerthe libcurl-easy(3) man page.
48*6236dae4SAndroid Build Coastguard Worker
49*6236dae4SAndroid Build Coastguard WorkerThe multi interface on the other hand is an asynchronous interface, that you
50*6236dae4SAndroid Build Coastguard Workercall and that performs only a little piece of the transfer on each invoke. It
51*6236dae4SAndroid Build Coastguard Workeris perfect if you want to do things while the transfer is in progress, or
52*6236dae4SAndroid Build Coastguard Workersimilar. The multi interface allows you to select() on libcurl action, and
53*6236dae4SAndroid Build Coastguard Workereven to easily download multiple files simultaneously using a single
54*6236dae4SAndroid Build Coastguard Workerthread. See further details in the libcurl-multi(3) man page.
55*6236dae4SAndroid Build Coastguard Worker
56*6236dae4SAndroid Build Coastguard Worker# SUPPORT INTERFACES
57*6236dae4SAndroid Build Coastguard Worker
58*6236dae4SAndroid Build Coastguard WorkerThere is also a series of other helpful functions and interface families to
59*6236dae4SAndroid Build Coastguard Workeruse, including these:
60*6236dae4SAndroid Build Coastguard Worker
61*6236dae4SAndroid Build Coastguard Worker## curl_version_info()
62*6236dae4SAndroid Build Coastguard Worker
63*6236dae4SAndroid Build Coastguard Workergets detailed libcurl (and other used libraries) version info. See
64*6236dae4SAndroid Build Coastguard Workercurl_version_info(3)
65*6236dae4SAndroid Build Coastguard Worker
66*6236dae4SAndroid Build Coastguard Worker## curl_getdate()
67*6236dae4SAndroid Build Coastguard Worker
68*6236dae4SAndroid Build Coastguard Workerconverts a date string to time_t. See curl_getdate(3)
69*6236dae4SAndroid Build Coastguard Worker
70*6236dae4SAndroid Build Coastguard Worker## curl_easy_getinfo()
71*6236dae4SAndroid Build Coastguard Worker
72*6236dae4SAndroid Build Coastguard Workerget information about a performed transfer. See curl_easy_getinfo(3)
73*6236dae4SAndroid Build Coastguard Worker
74*6236dae4SAndroid Build Coastguard Worker## curl_mime_addpart()
75*6236dae4SAndroid Build Coastguard Worker
76*6236dae4SAndroid Build Coastguard Workerhelps building an HTTP form POST. See curl_mime_addpart(3)
77*6236dae4SAndroid Build Coastguard Worker
78*6236dae4SAndroid Build Coastguard Worker## curl_slist_append()
79*6236dae4SAndroid Build Coastguard Worker
80*6236dae4SAndroid Build Coastguard Workerbuilds a linked list. See curl_slist_append(3)
81*6236dae4SAndroid Build Coastguard Worker
82*6236dae4SAndroid Build Coastguard Worker## Sharing data between transfers
83*6236dae4SAndroid Build Coastguard Worker
84*6236dae4SAndroid Build Coastguard WorkerYou can have multiple easy handles share certain data, even if they are used
85*6236dae4SAndroid Build Coastguard Workerin different threads. This magic is setup using the share interface, as
86*6236dae4SAndroid Build Coastguard Workerdescribed in the libcurl-share(3) man page.
87*6236dae4SAndroid Build Coastguard Worker
88*6236dae4SAndroid Build Coastguard Worker## URL Parsing
89*6236dae4SAndroid Build Coastguard Worker
90*6236dae4SAndroid Build Coastguard WorkerURL parsing and manipulations. See libcurl-url(3)
91*6236dae4SAndroid Build Coastguard Worker
92*6236dae4SAndroid Build Coastguard Worker## WebSocket communication
93*6236dae4SAndroid Build Coastguard Worker
94*6236dae4SAndroid Build Coastguard WorkerSee libcurl-ws(3)
95*6236dae4SAndroid Build Coastguard Worker
96*6236dae4SAndroid Build Coastguard Worker# LINKING WITH LIBCURL
97*6236dae4SAndroid Build Coastguard Worker
98*6236dae4SAndroid Build Coastguard WorkerOn Unix-like machines, there is a tool named curl-config that gets installed
99*6236dae4SAndroid Build Coastguard Workerwith the rest of the curl stuff when 'make install' is performed.
100*6236dae4SAndroid Build Coastguard Worker
101*6236dae4SAndroid Build Coastguard Workercurl-config is added to make it easier for applications to link with libcurl
102*6236dae4SAndroid Build Coastguard Workerand developers to learn about libcurl and how to use it.
103*6236dae4SAndroid Build Coastguard Worker
104*6236dae4SAndroid Build Coastguard WorkerRun 'curl-config --libs' to get the (additional) linker options you need to
105*6236dae4SAndroid Build Coastguard Workerlink with the particular version of libcurl you have installed. See the
106*6236dae4SAndroid Build Coastguard Worker*curl-config(1)* man page for further details.
107*6236dae4SAndroid Build Coastguard Worker
108*6236dae4SAndroid Build Coastguard WorkerUnix-like operating system that ship libcurl as part of their distributions
109*6236dae4SAndroid Build Coastguard Workeroften do not provide the curl-config tool, but simply install the library and
110*6236dae4SAndroid Build Coastguard Workerheaders in the common path for this purpose.
111*6236dae4SAndroid Build Coastguard Worker
112*6236dae4SAndroid Build Coastguard WorkerMany Linux and similar systems use pkg-config to provide build and link
113*6236dae4SAndroid Build Coastguard Workeroptions about libraries and libcurl supports that as well.
114*6236dae4SAndroid Build Coastguard Worker
115*6236dae4SAndroid Build Coastguard Worker# LIBCURL SYMBOL NAMES
116*6236dae4SAndroid Build Coastguard Worker
117*6236dae4SAndroid Build Coastguard WorkerAll public functions in the libcurl interface are prefixed with 'curl_' (with
118*6236dae4SAndroid Build Coastguard Workera lowercase c). You can find other functions in the library source code, but
119*6236dae4SAndroid Build Coastguard Workerother prefixes indicate that the functions are private and may change without
120*6236dae4SAndroid Build Coastguard Workerfurther notice in the next release.
121*6236dae4SAndroid Build Coastguard Worker
122*6236dae4SAndroid Build Coastguard WorkerOnly use documented functions and functionality.
123*6236dae4SAndroid Build Coastguard Worker
124*6236dae4SAndroid Build Coastguard Worker# PORTABILITY
125*6236dae4SAndroid Build Coastguard Worker
126*6236dae4SAndroid Build Coastguard Workerlibcurl works
127*6236dae4SAndroid Build Coastguard Worker**exactly**
128*6236dae4SAndroid Build Coastguard Workerthe same, on any of the platforms it compiles and builds on.
129*6236dae4SAndroid Build Coastguard Worker
130*6236dae4SAndroid Build Coastguard Worker# THREADS
131*6236dae4SAndroid Build Coastguard Worker
132*6236dae4SAndroid Build Coastguard Workerlibcurl is thread safe but there are a few exceptions. Refer to
133*6236dae4SAndroid Build Coastguard Workerlibcurl-thread(3) for more information.
134*6236dae4SAndroid Build Coastguard Worker
135*6236dae4SAndroid Build Coastguard Worker# PERSISTENT CONNECTIONS
136*6236dae4SAndroid Build Coastguard Worker
137*6236dae4SAndroid Build Coastguard WorkerPersistent connections means that libcurl can reuse the same connection for
138*6236dae4SAndroid Build Coastguard Workerseveral transfers, if the conditions are right.
139*6236dae4SAndroid Build Coastguard Worker
140*6236dae4SAndroid Build Coastguard Workerlibcurl always attempts to use persistent connections. Whenever you use
141*6236dae4SAndroid Build Coastguard Workercurl_easy_perform(3) or curl_multi_perform(3) etc, libcurl
142*6236dae4SAndroid Build Coastguard Workerattempts to use an existing connection to do the transfer, and if none exists
143*6236dae4SAndroid Build Coastguard Workerit opens a new one that is subject for reuse on a possible following call to
144*6236dae4SAndroid Build Coastguard Workercurl_easy_perform(3) or curl_multi_perform(3).
145*6236dae4SAndroid Build Coastguard Worker
146*6236dae4SAndroid Build Coastguard WorkerTo allow libcurl to take full advantage of persistent connections, you should
147*6236dae4SAndroid Build Coastguard Workerdo as many of your file transfers as possible using the same handle.
148*6236dae4SAndroid Build Coastguard Worker
149*6236dae4SAndroid Build Coastguard WorkerIf you use the easy interface, and you call curl_easy_cleanup(3), all
150*6236dae4SAndroid Build Coastguard Workerthe possibly open connections held by libcurl are closed and forgotten.
151*6236dae4SAndroid Build Coastguard Worker
152*6236dae4SAndroid Build Coastguard WorkerWhen you have created a multi handle and are using the multi interface, the
153*6236dae4SAndroid Build Coastguard Workerconnection pool is instead kept in the multi handle so closing and creating
154*6236dae4SAndroid Build Coastguard Workernew easy handles to do transfers do not affect them. Instead all added easy
155*6236dae4SAndroid Build Coastguard Workerhandles can take advantage of the single shared pool.
156*6236dae4SAndroid Build Coastguard Worker
157*6236dae4SAndroid Build Coastguard Worker# GLOBAL CONSTANTS
158*6236dae4SAndroid Build Coastguard Worker
159*6236dae4SAndroid Build Coastguard WorkerThere are a variety of constants that libcurl uses, mainly through its
160*6236dae4SAndroid Build Coastguard Workerinternal use of other libraries, which are too complicated for the
161*6236dae4SAndroid Build Coastguard Workerlibrary loader to set up. Therefore, a program must call a library
162*6236dae4SAndroid Build Coastguard Workerfunction after the program is loaded and running to finish setting up
163*6236dae4SAndroid Build Coastguard Workerthe library code. For example, when libcurl is built for SSL
164*6236dae4SAndroid Build Coastguard Workercapability via the GNU TLS library, there is an elaborate tree inside
165*6236dae4SAndroid Build Coastguard Workerthat library that describes the SSL protocol.
166*6236dae4SAndroid Build Coastguard Worker
167*6236dae4SAndroid Build Coastguard Workercurl_global_init(3) is the function that you must call. This may
168*6236dae4SAndroid Build Coastguard Workerallocate resources (e.g. the memory for the GNU TLS tree mentioned above), so
169*6236dae4SAndroid Build Coastguard Workerthe companion function curl_global_cleanup(3) releases them.
170*6236dae4SAndroid Build Coastguard Worker
171*6236dae4SAndroid Build Coastguard WorkerIf libcurl was compiled with support for multiple SSL backends, the function
172*6236dae4SAndroid Build Coastguard Workercurl_global_sslset(3) can be called before curl_global_init(3)
173*6236dae4SAndroid Build Coastguard Workerto select the active SSL backend.
174*6236dae4SAndroid Build Coastguard Worker
175*6236dae4SAndroid Build Coastguard WorkerThe global constant functions are thread-safe since libcurl 7.84.0 if
176*6236dae4SAndroid Build Coastguard Workercurl_version_info(3) has the CURL_VERSION_THREADSAFE feature bit set
177*6236dae4SAndroid Build Coastguard Worker(most platforms). Read libcurl-thread(3) for thread safety guidelines.
178*6236dae4SAndroid Build Coastguard Worker
179*6236dae4SAndroid Build Coastguard WorkerIf the global constant functions are *not thread safe*, then you must
180*6236dae4SAndroid Build Coastguard Workernot call them when any other thread in the program is running. It
181*6236dae4SAndroid Build Coastguard Workeris not good enough that no other thread is using libcurl at the time,
182*6236dae4SAndroid Build Coastguard Workerbecause these functions internally call similar functions of other
183*6236dae4SAndroid Build Coastguard Workerlibraries, and those functions are similarly thread-unsafe. You cannot
184*6236dae4SAndroid Build Coastguard Workergenerally know what these libraries are, or whether other threads are
185*6236dae4SAndroid Build Coastguard Workerusing them.
186*6236dae4SAndroid Build Coastguard Worker
187*6236dae4SAndroid Build Coastguard WorkerIf the global constant functions are *not thread safe*, then the basic rule
188*6236dae4SAndroid Build Coastguard Workerfor constructing a program that uses libcurl is this: Call
189*6236dae4SAndroid Build Coastguard Workercurl_global_init(3), with a *CURL_GLOBAL_ALL* argument, immediately
190*6236dae4SAndroid Build Coastguard Workerafter the program starts, while it is still only one thread and before it uses
191*6236dae4SAndroid Build Coastguard Workerlibcurl at all. Call curl_global_cleanup(3) immediately before the
192*6236dae4SAndroid Build Coastguard Workerprogram exits, when the program is again only one thread and after its last
193*6236dae4SAndroid Build Coastguard Workeruse of libcurl.
194*6236dae4SAndroid Build Coastguard Worker
195*6236dae4SAndroid Build Coastguard WorkerIt is not actually required that the functions be called at the beginning
196*6236dae4SAndroid Build Coastguard Workerand end of the program -- that is just usually the easiest way to do it.
197*6236dae4SAndroid Build Coastguard Worker
198*6236dae4SAndroid Build Coastguard WorkerYou can call both of these multiple times, as long as all calls meet
199*6236dae4SAndroid Build Coastguard Workerthese requirements and the number of calls to each is the same.
200*6236dae4SAndroid Build Coastguard Worker
201*6236dae4SAndroid Build Coastguard WorkerThe global constant situation merits special consideration when the code you
202*6236dae4SAndroid Build Coastguard Workerare writing to use libcurl is not the main program, but rather a modular piece
203*6236dae4SAndroid Build Coastguard Workerof a program, e.g. another library. As a module, your code does not know about
204*6236dae4SAndroid Build Coastguard Workerother parts of the program -- it does not know whether they use libcurl or
205*6236dae4SAndroid Build Coastguard Workernot. Its code does not necessarily run at the start and end of the whole
206*6236dae4SAndroid Build Coastguard Workerprogram.
207*6236dae4SAndroid Build Coastguard Worker
208*6236dae4SAndroid Build Coastguard WorkerA module like this must have global constant functions of its own, just like
209*6236dae4SAndroid Build Coastguard Workercurl_global_init(3) and curl_global_cleanup(3). The module thus
210*6236dae4SAndroid Build Coastguard Workerhas control at the beginning and end of the program and has a place to call
211*6236dae4SAndroid Build Coastguard Workerthe libcurl functions. If multiple modules in the program use libcurl, they
212*6236dae4SAndroid Build Coastguard Workerall separately call the libcurl functions, and that is OK because only the
213*6236dae4SAndroid Build Coastguard Workerfirst curl_global_init(3) and the last curl_global_cleanup(3) in a
214*6236dae4SAndroid Build Coastguard Workerprogram change anything. (libcurl uses a reference count in static memory).
215*6236dae4SAndroid Build Coastguard Worker
216*6236dae4SAndroid Build Coastguard WorkerIn a C++ module, it is common to deal with the global constant situation by
217*6236dae4SAndroid Build Coastguard Workerdefining a special class that represents the global constant environment of
218*6236dae4SAndroid Build Coastguard Workerthe module. A program always has exactly one object of the class, in static
219*6236dae4SAndroid Build Coastguard Workerstorage. That way, the program automatically calls the constructor of the
220*6236dae4SAndroid Build Coastguard Workerobject as the program starts up and the destructor as it terminates. As the
221*6236dae4SAndroid Build Coastguard Workerauthor of this libcurl-using module, you can make the constructor call
222*6236dae4SAndroid Build Coastguard Workercurl_global_init(3) and the destructor call curl_global_cleanup(3)
223*6236dae4SAndroid Build Coastguard Workerand satisfy libcurl's requirements without your user having to think about it.
224*6236dae4SAndroid Build Coastguard Worker(Caveat: If you are initializing libcurl from a Windows DLL you should not
225*6236dae4SAndroid Build Coastguard Workerinitialize it from *DllMain* or a static initializer because Windows holds
226*6236dae4SAndroid Build Coastguard Workerthe loader lock during that time and it could cause a deadlock.)
227*6236dae4SAndroid Build Coastguard Worker
228*6236dae4SAndroid Build Coastguard Workercurl_global_init(3) has an argument that tells what particular parts of
229*6236dae4SAndroid Build Coastguard Workerthe global constant environment to set up. In order to successfully use any
230*6236dae4SAndroid Build Coastguard Workervalue except *CURL_GLOBAL_ALL* (which says to set up the whole thing), you
231*6236dae4SAndroid Build Coastguard Workermust have specific knowledge of internal workings of libcurl and all other
232*6236dae4SAndroid Build Coastguard Workerparts of the program of which it is part.
233*6236dae4SAndroid Build Coastguard Worker
234*6236dae4SAndroid Build Coastguard WorkerA special part of the global constant environment is the identity of the
235*6236dae4SAndroid Build Coastguard Workermemory allocator. curl_global_init(3) selects the system default memory
236*6236dae4SAndroid Build Coastguard Workerallocator, but you can use curl_global_init_mem(3) to supply one of your
237*6236dae4SAndroid Build Coastguard Workerown. However, there is no way to use curl_global_init_mem(3) in a
238*6236dae4SAndroid Build Coastguard Workermodular program -- all modules in the program that might use libcurl would
239*6236dae4SAndroid Build Coastguard Workerhave to agree on one allocator.
240*6236dae4SAndroid Build Coastguard Worker
241*6236dae4SAndroid Build Coastguard WorkerThere is a failsafe in libcurl that makes it usable in simple situations
242*6236dae4SAndroid Build Coastguard Workerwithout you having to worry about the global constant environment at all:
243*6236dae4SAndroid Build Coastguard Workercurl_easy_init(3) sets up the environment itself if it has not been done
244*6236dae4SAndroid Build Coastguard Workeryet. The resources it acquires to do so get released by the operating system
245*6236dae4SAndroid Build Coastguard Workerautomatically when the program exits.
246*6236dae4SAndroid Build Coastguard Worker
247*6236dae4SAndroid Build Coastguard WorkerThis failsafe feature exists mainly for backward compatibility because there
248*6236dae4SAndroid Build Coastguard Workerwas a time when the global functions did not exist. Because it is sufficient
249*6236dae4SAndroid Build Coastguard Workeronly in the simplest of programs, it is not recommended for any program to
250*6236dae4SAndroid Build Coastguard Workerrely on it.
251