1curl_easy_perform(3) libcurl Manual curl_easy_perform(3)
2
3
4
6 curl_easy_perform - perform a blocking file transfer
7
9 #include <curl/curl.h>
10
11 CURLcode curl_easy_perform(CURL *easy_handle);
12
14 Invoke this function after curl_easy_init(3) and all the curl_easy_se‐
15 topt(3) calls are made, and it performs the transfer as described in
16 the options. It must be called with the same easy_handle as input as
17 the curl_easy_init(3) call returned.
18
19 curl_easy_perform(3) performs the entire request in a blocking manner
20 and returns when done, or earlier if it fails. For non-blocking behav‐
21 ior, see curl_multi_perform(3).
22
23 You can do any amount of calls to curl_easy_perform(3) while using the
24 same easy_handle. If you intend to transfer more than one file, you are
25 even encouraged to do so. libcurl will then attempt to re-use the same
26 connection for the following transfers, thus making the operations
27 faster, less CPU intense and using less network resources. Just note
28 that you will have to use curl_easy_setopt(3) between the invokes to
29 set options for the following curl_easy_perform.
30
31 You must never call this function simultaneously from two places using
32 the same easy_handle. Let the function return first before invoking it
33 another time. If you want parallel transfers, you must use several curl
34 easy_handles.
35
36 A network transfer moves data to a peer or from a peer. An application
37 tells libcurl how to receive data by setting the CURLOPT_WRITEFUNC‐
38 TION(3) and CURLOPT_WRITEDATA(3) options. To tell libcurl what data to
39 send, there are a few more alternatives but two common ones are CUR‐
40 LOPT_READFUNCTION(3) and CURLOPT_POSTFIELDS(3).
41
42 While the easy_handle is added to a multi handle, it cannot be used by
43 curl_easy_perform(3).
44
46 CURL *curl = curl_easy_init();
47 if(curl) {
48 CURLcode res;
49 curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
50 res = curl_easy_perform(curl);
51 curl_easy_cleanup(curl);
52 }
53
55 Always
56
58 CURLE_OK (0) means everything was ok, non-zero means an error occurred
59 as <curl/curl.h> defines - see libcurl-errors(3). If the CURLOPT_ERROR‐
60 BUFFER(3) was set with curl_easy_setopt(3) there will be a readable er‐
61 ror message in the error buffer when non-zero is returned.
62
64 curl_easy_init(3), curl_easy_setopt(3), curl_multi_add_handle(3),
65 curl_multi_perform(3), libcurl-errors(3),
66
67
68
69libcurl 7.85.0 May 17, 2022 curl_easy_perform(3)