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