1libcurl-errors(3) libcurl errors libcurl-errors(3)
2
3
4
6 libcurl-errors - error codes in libcurl
7
9 This man page includes most, if not all, available error codes in
10 libcurl. Why they occur and possibly what you can do to fix the prob‐
11 lem are also included.
12
14 Almost all "easy" interface functions return a CURLcode error code. No
15 matter what, using the curl_easy_setopt(3) option CURLOPT_ERROR‐
16 BUFFER(3) is a good idea as it will give you a human readable error
17 string that may offer more details about the cause of the error than
18 just the error code. curl_easy_strerror(3) can be called to get an
19 error string from a given CURLcode number.
20
21 CURLcode is one of the following:
22
23 CURLE_OK (0)
24 All fine. Proceed as usual.
25
26 CURLE_UNSUPPORTED_PROTOCOL (1)
27 The URL you passed to libcurl used a protocol that this libcurl
28 does not support. The support might be a compile-time option
29 that you didn't use, it can be a misspelled protocol string or
30 just a protocol libcurl has no code for.
31
32 CURLE_FAILED_INIT (2)
33 Very early initialization code failed. This is likely to be an
34 internal error or problem, or a resource problem where something
35 fundamental couldn't get done at init time.
36
37 CURLE_URL_MALFORMAT (3)
38 The URL was not properly formatted.
39
40 CURLE_NOT_BUILT_IN (4)
41 A requested feature, protocol or option was not found built-in
42 in this libcurl due to a build-time decision. This means that a
43 feature or option was not enabled or explicitly disabled when
44 libcurl was built and in order to get it to function you have to
45 get a rebuilt libcurl.
46
47 CURLE_COULDNT_RESOLVE_PROXY (5)
48 Couldn't resolve proxy. The given proxy host could not be
49 resolved.
50
51 CURLE_COULDNT_RESOLVE_HOST (6)
52 Couldn't resolve host. The given remote host was not resolved.
53
54 CURLE_COULDNT_CONNECT (7)
55 Failed to connect() to host or proxy.
56
57 CURLE_WEIRD_SERVER_REPLY (8)
58 The server sent data libcurl couldn't parse. This error code was
59 known as as CURLE_FTP_WEIRD_SERVER_REPLY before 7.51.0.
60
61 CURLE_REMOTE_ACCESS_DENIED (9)
62 We were denied access to the resource given in the URL. For
63 FTP, this occurs while trying to change to the remote directory.
64
65 CURLE_FTP_ACCEPT_FAILED (10)
66 While waiting for the server to connect back when an active FTP
67 session is used, an error code was sent over the control connec‐
68 tion or similar.
69
70 CURLE_FTP_WEIRD_PASS_REPLY (11)
71 After having sent the FTP password to the server, libcurl
72 expects a proper reply. This error code indicates that an unex‐
73 pected code was returned.
74
75 CURLE_FTP_ACCEPT_TIMEOUT (12)
76 During an active FTP session while waiting for the server to
77 connect, the CURLOPT_ACCEPTTIMEOUT_MS(3) (or the internal
78 default) timeout expired.
79
80 CURLE_FTP_WEIRD_PASV_REPLY (13)
81 libcurl failed to get a sensible result back from the server as
82 a response to either a PASV or a EPSV command. The server is
83 flawed.
84
85 CURLE_FTP_WEIRD_227_FORMAT (14)
86 FTP servers return a 227-line as a response to a PASV command.
87 If libcurl fails to parse that line, this return code is passed
88 back.
89
90 CURLE_FTP_CANT_GET_HOST (15)
91 An internal failure to lookup the host used for the new connec‐
92 tion.
93
94 CURLE_HTTP2 (16)
95 A problem was detected in the HTTP2 framing layer. This is some‐
96 what generic and can be one out of several problems, see the
97 error buffer for details.
98
99 CURLE_FTP_COULDNT_SET_TYPE (17)
100 Received an error when trying to set the transfer mode to binary
101 or ASCII.
102
103 CURLE_PARTIAL_FILE (18)
104 A file transfer was shorter or larger than expected. This hap‐
105 pens when the server first reports an expected transfer size,
106 and then delivers data that doesn't match the previously given
107 size.
108
109 CURLE_FTP_COULDNT_RETR_FILE (19)
110 This was either a weird reply to a 'RETR' command or a zero byte
111 transfer complete.
112
113 CURLE_QUOTE_ERROR (21)
114 When sending custom "QUOTE" commands to the remote server, one
115 of the commands returned an error code that was 400 or higher
116 (for FTP) or otherwise indicated unsuccessful completion of the
117 command.
118
119 CURLE_HTTP_RETURNED_ERROR (22)
120 This is returned if CURLOPT_FAILONERROR(3) is set TRUE and the
121 HTTP server returns an error code that is >= 400.
122
123 CURLE_WRITE_ERROR (23)
124 An error occurred when writing received data to a local file, or
125 an error was returned to libcurl from a write callback.
126
127 CURLE_UPLOAD_FAILED (25)
128 Failed starting the upload. For FTP, the server typically denied
129 the STOR command. The error buffer usually contains the server's
130 explanation for this.
131
132 CURLE_READ_ERROR (26)
133 There was a problem reading a local file or an error returned by
134 the read callback.
135
136 CURLE_OUT_OF_MEMORY (27)
137 A memory allocation request failed. This is serious badness and
138 things are severely screwed up if this ever occurs.
139
140 CURLE_OPERATION_TIMEDOUT (28)
141 Operation timeout. The specified time-out period was reached
142 according to the conditions.
143
144 CURLE_FTP_PORT_FAILED (30)
145 The FTP PORT command returned error. This mostly happens when
146 you haven't specified a good enough address for libcurl to use.
147 See CURLOPT_FTPPORT(3).
148
149 CURLE_FTP_COULDNT_USE_REST (31)
150 The FTP REST command returned error. This should never happen if
151 the server is sane.
152
153 CURLE_RANGE_ERROR (33)
154 The server does not support or accept range requests.
155
156 CURLE_HTTP_POST_ERROR (34)
157 This is an odd error that mainly occurs due to internal confu‐
158 sion.
159
160 CURLE_SSL_CONNECT_ERROR (35)
161 A problem occurred somewhere in the SSL/TLS handshake. You
162 really want the error buffer and read the message there as it
163 pinpoints the problem slightly more. Could be certificates (file
164 formats, paths, permissions), passwords, and others.
165
166 CURLE_BAD_DOWNLOAD_RESUME (36)
167 The download could not be resumed because the specified offset
168 was out of the file boundary.
169
170 CURLE_FILE_COULDNT_READ_FILE (37)
171 A file given with FILE:// couldn't be opened. Most likely
172 because the file path doesn't identify an existing file. Did you
173 check file permissions?
174
175 CURLE_LDAP_CANNOT_BIND (38)
176 LDAP cannot bind. LDAP bind operation failed.
177
178 CURLE_LDAP_SEARCH_FAILED (39)
179 LDAP search failed.
180
181 CURLE_FUNCTION_NOT_FOUND (41)
182 Function not found. A required zlib function was not found.
183
184 CURLE_ABORTED_BY_CALLBACK (42)
185 Aborted by callback. A callback returned "abort" to libcurl.
186
187 CURLE_BAD_FUNCTION_ARGUMENT (43)
188 A function was called with a bad parameter.
189
190 CURLE_INTERFACE_FAILED (45)
191 Interface error. A specified outgoing interface could not be
192 used. Set which interface to use for outgoing connections'
193 source IP address with CURLOPT_INTERFACE(3).
194
195 CURLE_TOO_MANY_REDIRECTS (47)
196 Too many redirects. When following redirects, libcurl hit the
197 maximum amount. Set your limit with CURLOPT_MAXREDIRS(3).
198
199 CURLE_UNKNOWN_OPTION (48)
200 An option passed to libcurl is not recognized/known. Refer to
201 the appropriate documentation. This is most likely a problem in
202 the program that uses libcurl. The error buffer might contain
203 more specific information about which exact option it concerns.
204
205 CURLE_TELNET_OPTION_SYNTAX (49)
206 A telnet option string was Illegally formatted.
207
208 CURLE_GOT_NOTHING (52)
209 Nothing was returned from the server, and under the circum‐
210 stances, getting nothing is considered an error.
211
212 CURLE_SSL_ENGINE_NOTFOUND (53)
213 The specified crypto engine wasn't found.
214
215 CURLE_SSL_ENGINE_SETFAILED (54)
216 Failed setting the selected SSL crypto engine as default!
217
218 CURLE_SEND_ERROR (55)
219 Failed sending network data.
220
221 CURLE_RECV_ERROR (56)
222 Failure with receiving network data.
223
224 CURLE_SSL_CERTPROBLEM (58)
225 problem with the local client certificate.
226
227 CURLE_SSL_CIPHER (59)
228 Couldn't use specified cipher.
229
230 CURLE_PEER_FAILED_VERIFICATION (60)
231 The remote server's SSL certificate or SSH md5 fingerprint was
232 deemed not OK. This error code has been unified with
233 CURLE_SSL_CACERT since 7.62.0. Its previous value was 51.
234
235 CURLE_BAD_CONTENT_ENCODING (61)
236 Unrecognized transfer encoding.
237
238 CURLE_LDAP_INVALID_URL (62)
239 Invalid LDAP URL.
240
241 CURLE_FILESIZE_EXCEEDED (63)
242 Maximum file size exceeded.
243
244 CURLE_USE_SSL_FAILED (64)
245 Requested FTP SSL level failed.
246
247 CURLE_SEND_FAIL_REWIND (65)
248 When doing a send operation curl had to rewind the data to
249 retransmit, but the rewinding operation failed.
250
251 CURLE_SSL_ENGINE_INITFAILED (66)
252 Initiating the SSL Engine failed.
253
254 CURLE_LOGIN_DENIED (67)
255 The remote server denied curl to login (Added in 7.13.1)
256
257 CURLE_TFTP_NOTFOUND (68)
258 File not found on TFTP server.
259
260 CURLE_TFTP_PERM (69)
261 Permission problem on TFTP server.
262
263 CURLE_REMOTE_DISK_FULL (70)
264 Out of disk space on the server.
265
266 CURLE_TFTP_ILLEGAL (71)
267 Illegal TFTP operation.
268
269 CURLE_TFTP_UNKNOWNID (72)
270 Unknown TFTP transfer ID.
271
272 CURLE_REMOTE_FILE_EXISTS (73)
273 File already exists and will not be overwritten.
274
275 CURLE_TFTP_NOSUCHUSER (74)
276 This error should never be returned by a properly functioning
277 TFTP server.
278
279 CURLE_CONV_FAILED (75)
280 Character conversion failed.
281
282 CURLE_CONV_REQD (76)
283 Caller must register conversion callbacks.
284
285 CURLE_SSL_CACERT_BADFILE (77)
286 Problem with reading the SSL CA cert (path? access rights?)
287
288 CURLE_REMOTE_FILE_NOT_FOUND (78)
289 The resource referenced in the URL does not exist.
290
291 CURLE_SSH (79)
292 An unspecified error occurred during the SSH session.
293
294 CURLE_SSL_SHUTDOWN_FAILED (80)
295 Failed to shut down the SSL connection.
296
297 CURLE_AGAIN (81)
298 Socket is not ready for send/recv wait till it's ready and try
299 again. This return code is only returned from curl_easy_recv(3)
300 and curl_easy_send(3) (Added in 7.18.2)
301
302 CURLE_SSL_CRL_BADFILE (82)
303 Failed to load CRL file (Added in 7.19.0)
304
305 CURLE_SSL_ISSUER_ERROR (83)
306 Issuer check failed (Added in 7.19.0)
307
308 CURLE_FTP_PRET_FAILED (84)
309 The FTP server does not understand the PRET command at all or
310 does not support the given argument. Be careful when using CUR‐
311 LOPT_CUSTOMREQUEST(3), a custom LIST command will be sent with
312 PRET CMD before PASV as well. (Added in 7.20.0)
313
314 CURLE_RTSP_CSEQ_ERROR (85)
315 Mismatch of RTSP CSeq numbers.
316
317 CURLE_RTSP_SESSION_ERROR (86)
318 Mismatch of RTSP Session Identifiers.
319
320 CURLE_FTP_BAD_FILE_LIST (87)
321 Unable to parse FTP file list (during FTP wildcard downloading).
322
323 CURLE_CHUNK_FAILED (88)
324 Chunk callback reported error.
325
326 CURLE_NO_CONNECTION_AVAILABLE (89)
327 (For internal use only, will never be returned by libcurl) No
328 connection available, the session will be queued. (added in
329 7.30.0)
330
331 CURLE_SSL_PINNEDPUBKEYNOTMATCH (90)
332 Failed to match the pinned key specified with CURLOPT_PINNEDPUB‐
333 LICKEY(3).
334
335 CURLE_SSL_INVALIDCERTSTATUS (91)
336 Status returned failure when asked with CURLOPT_SSL_VERIFYSTA‐
337 TUS(3).
338
339 CURLE_HTTP2_STREAM (92)
340 Stream error in the HTTP/2 framing layer.
341
342 CURLE_RECURSIVE_API_CALL (93)
343 An API function was called from inside a callback.
344
345 CURLE_AUTH_ERROR (94)
346 An authentication function returned an error.
347
348 CURLE_HTTP3 (95)
349 A problem was detected in the HTTP/3 layer. This is somewhat
350 generic and can be one out of several problems, see the error
351 buffer for details.
352
353 CURLE_QUIC_CONNECT_ERROR (96)
354 QUIC connection error. This error may be caused by an SSL
355 library error. QUIC is the protocol used for HTTP/3 transfers.
356
357 CURLE_OBSOLETE*
358 These error codes will never be returned. They were used in an
359 old libcurl version and are currently unused.
360
362 This is the generic return code used by functions in the libcurl multi
363 interface. Also consider curl_multi_strerror(3).
364
365 CURLM_CALL_MULTI_PERFORM (-1)
366 This is not really an error. It means you should call
367 curl_multi_perform(3) again without doing select() or similar in
368 between. Before version 7.20.0 this could be returned by
369 curl_multi_perform(3), but in later versions this return code is
370 never used.
371
372 CURLM_CALL_MULTI_SOCKET (-1)
373 An alias for CURLM_CALL_MULTI_PERFORM. Never returned by modern
374 libcurl versions.
375
376 CURLM_OK (0)
377 Things are fine.
378
379 CURLM_BAD_HANDLE (1)
380 The passed-in handle is not a valid CURLM handle.
381
382 CURLM_BAD_EASY_HANDLE (2)
383 An easy handle was not good/valid. It could mean that it isn't
384 an easy handle at all, or possibly that the handle already is in
385 use by this or another multi handle.
386
387 CURLM_OUT_OF_MEMORY (3)
388 You are doomed.
389
390 CURLM_INTERNAL_ERROR (4)
391 This can only be returned if libcurl bugs. Please report it to
392 us!
393
394 CURLM_BAD_SOCKET (5)
395 The passed-in socket is not a valid one that libcurl already
396 knows about. (Added in 7.15.4)
397
398 CURLM_UNKNOWN_OPTION (6)
399 curl_multi_setopt() with unsupported option (Added in 7.15.4)
400
401 CURLM_ADDED_ALREADY (7)
402 An easy handle already added to a multi handle was attempted to
403 get added a second time. (Added in 7.32.1)
404
405 CURLM_RECURSIVE_API_CALL (8)
406 An API function was called from inside a callback.
407
408 CURLM_WAKEUP_FAILURE (9)
409 Wakeup is unavailable or failed.
410
411 CURLM_BAD_FUNCTION_ARGUMENT (10)
412 A function was called with a bad parameter.
413
415 The "share" interface will return a CURLSHcode to indicate when an
416 error has occurred. Also consider curl_share_strerror(3).
417
418 CURLSHE_OK (0)
419 All fine. Proceed as usual.
420
421 CURLSHE_BAD_OPTION (1)
422 An invalid option was passed to the function.
423
424 CURLSHE_IN_USE (2)
425 The share object is currently in use.
426
427 CURLSHE_INVALID (3)
428 An invalid share object was passed to the function.
429
430 CURLSHE_NOMEM (4)
431 Not enough memory was available. (Added in 7.12.0)
432
433 CURLSHE_NOT_BUILT_IN (5)
434 The requested sharing could not be done because the library you
435 use don't have that particular feature enabled. (Added in
436 7.23.0)
437
439 CURLUE_BAD_HANDLE (1)
440 An argument that should be a CURLU pointer was passed in as a
441 NULL.
442
443 CURLUE_BAD_PARTPOINTER (2)
444 A NULL pointer was passed to the 'part' argument of
445 curl_url_get(3).
446
447 CURLUE_MALFORMED_INPUT (3)
448 A malformed input was passed to a URL API function.
449
450 CURLUE_BAD_PORT_NUMBER (4)
451 The port number was not a decimal number between 0 and 65535.
452
453 CURLUE_UNSUPPORTED_SCHEME (5)
454 This libcurl build doesn't support the given URL scheme.
455
456 CURLUE_URLDECODE (6)
457 URL decode error, most likely because of rubbish in the input.
458
459 CURLUE_OUT_OF_MEMORY (7)
460 A memory function failed.
461
462 CURLUE_USER_NOT_ALLOWED (8)
463 Credentials was passed in the URL when prohibited.
464
465 CURLUE_UNKNOWN_PART (9)
466 An unknown part ID was passed to a URL API function.
467
468 CURLUE_NO_SCHEME (10)
469 There is no scheme part in the URL.
470
471 CURLUE_NO_USER (11)
472 There is no user part in the URL.
473
474 CURLUE_NO_PASSWORD (12)
475 There is no password part in the URL.
476
477 CURLUE_NO_OPTIONS (13)
478 There is no options part in the URL.
479
480 CURLUE_NO_HOST (14)
481 There is no host part in the URL.
482
483 CURLUE_NO_PORT (15)
484 There is no port part in the URL.
485
486 CURLUE_NO_QUERY (16)
487 There is no query part in the URL.
488
489 CURLUE_NO_FRAGMENT (17)
490 There is no fragment part in the URL.
491
493 curl_easy_strerror(3), curl_multi_strerror(3), curl_share_strerror(3),
494 CURLOPT_ERRORBUFFER(3), CURLOPT_VERBOSE(3), CURLOPT_DEBUGFUNCTION(3)
495
496
497
498libcurl 7.71.1 March 23, 2020 libcurl-errors(3)