mirror of
https://github.com/curl/curl.git
synced 2024-12-15 06:40:09 +08:00
94241a9e78
When a TLS server requests a client certificate during handshake and none can be provided, libcurl now returns this new error code CURLE_SSL_CLIENTCERT Only supported by Secure Transport and OpenSSL for TLS 1.3 so far. Closes #6721
365 lines
16 KiB
Groff
365 lines
16 KiB
Groff
.\" **************************************************************************
|
|
.\" * _ _ ____ _
|
|
.\" * Project ___| | | | _ \| |
|
|
.\" * / __| | | | |_) | |
|
|
.\" * | (__| |_| | _ <| |___
|
|
.\" * \___|\___/|_| \_\_____|
|
|
.\" *
|
|
.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
.\" *
|
|
.\" * This software is licensed as described in the file COPYING, which
|
|
.\" * you should have received as part of this distribution. The terms
|
|
.\" * are also available at https://curl.se/docs/copyright.html.
|
|
.\" *
|
|
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
.\" * copies of the Software, and permit persons to whom the Software is
|
|
.\" * furnished to do so, under the terms of the COPYING file.
|
|
.\" *
|
|
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
.\" * KIND, either express or implied.
|
|
.\" *
|
|
.\" **************************************************************************
|
|
.\"
|
|
.TH libcurl-errors 3 "1 Jan 2010" "libcurl 7.20.0" "libcurl errors"
|
|
.SH NAME
|
|
libcurl-errors \- error codes in libcurl
|
|
.SH DESCRIPTION
|
|
This man page includes most, if not all, available error codes in libcurl.
|
|
Why they occur and possibly what you can do to fix the problem are also included.
|
|
.SH "CURLcode"
|
|
Almost all "easy" interface functions return a CURLcode error code. No matter
|
|
what, using the \fIcurl_easy_setopt(3)\fP option \fICURLOPT_ERRORBUFFER(3)\fP
|
|
is a good idea as it will give you a human readable error string that may
|
|
offer more details about the cause of the error than just the error code.
|
|
\fIcurl_easy_strerror(3)\fP can be called to get an error string from a given
|
|
CURLcode number.
|
|
|
|
CURLcode is one of the following:
|
|
.IP "CURLE_OK (0)"
|
|
All fine. Proceed as usual.
|
|
.IP "CURLE_UNSUPPORTED_PROTOCOL (1)"
|
|
The URL you passed to libcurl used a protocol that this libcurl does not
|
|
support. The support might be a compile-time option that you didn't use, it
|
|
can be a misspelled protocol string or just a protocol libcurl has no code
|
|
for.
|
|
.IP "CURLE_FAILED_INIT (2)"
|
|
Very early initialization code failed. This is likely to be an internal error
|
|
or problem, or a resource problem where something fundamental couldn't get
|
|
done at init time.
|
|
.IP "CURLE_URL_MALFORMAT (3)"
|
|
The URL was not properly formatted.
|
|
.IP "CURLE_NOT_BUILT_IN (4)"
|
|
A requested feature, protocol or option was not found built-in in this libcurl
|
|
due to a build-time decision. This means that a feature or option was not
|
|
enabled or explicitly disabled when libcurl was built and in order to get it
|
|
to function you have to get a rebuilt libcurl.
|
|
.IP "CURLE_COULDNT_RESOLVE_PROXY (5)"
|
|
Couldn't resolve proxy. The given proxy host could not be resolved.
|
|
.IP "CURLE_COULDNT_RESOLVE_HOST (6)"
|
|
Couldn't resolve host. The given remote host was not resolved.
|
|
.IP "CURLE_COULDNT_CONNECT (7)"
|
|
Failed to connect() to host or proxy.
|
|
.IP "CURLE_WEIRD_SERVER_REPLY (8)"
|
|
The server sent data libcurl couldn't parse. This error code was known as as
|
|
\fICURLE_FTP_WEIRD_SERVER_REPLY\fP before 7.51.0.
|
|
.IP "CURLE_REMOTE_ACCESS_DENIED (9)"
|
|
We were denied access to the resource given in the URL. For FTP, this occurs
|
|
while trying to change to the remote directory.
|
|
.IP "CURLE_FTP_ACCEPT_FAILED (10)"
|
|
While waiting for the server to connect back when an active FTP session is
|
|
used, an error code was sent over the control connection or similar.
|
|
.IP "CURLE_FTP_WEIRD_PASS_REPLY (11)"
|
|
After having sent the FTP password to the server, libcurl expects a proper
|
|
reply. This error code indicates that an unexpected code was returned.
|
|
.IP "CURLE_FTP_ACCEPT_TIMEOUT (12)"
|
|
During an active FTP session while waiting for the server to connect, the
|
|
\fICURLOPT_ACCEPTTIMEOUT_MS(3)\fP (or the internal default) timeout expired.
|
|
.IP "CURLE_FTP_WEIRD_PASV_REPLY (13)"
|
|
libcurl failed to get a sensible result back from the server as a response to
|
|
either a PASV or a EPSV command. The server is flawed.
|
|
.IP "CURLE_FTP_WEIRD_227_FORMAT (14)"
|
|
FTP servers return a 227-line as a response to a PASV command. If libcurl
|
|
fails to parse that line, this return code is passed back.
|
|
.IP "CURLE_FTP_CANT_GET_HOST (15)"
|
|
An internal failure to lookup the host used for the new connection.
|
|
.IP "CURLE_HTTP2 (16)"
|
|
A problem was detected in the HTTP2 framing layer. This is somewhat generic
|
|
and can be one out of several problems, see the error buffer for details.
|
|
.IP "CURLE_FTP_COULDNT_SET_TYPE (17)"
|
|
Received an error when trying to set the transfer mode to binary or ASCII.
|
|
.IP "CURLE_PARTIAL_FILE (18)"
|
|
A file transfer was shorter or larger than expected. This happens when the
|
|
server first reports an expected transfer size, and then delivers data that
|
|
doesn't match the previously given size.
|
|
.IP "CURLE_FTP_COULDNT_RETR_FILE (19)"
|
|
This was either a weird reply to a 'RETR' command or a zero byte transfer
|
|
complete.
|
|
.IP "CURLE_QUOTE_ERROR (21)"
|
|
When sending custom "QUOTE" commands to the remote server, one of the commands
|
|
returned an error code that was 400 or higher (for FTP) or otherwise
|
|
indicated unsuccessful completion of the command.
|
|
.IP "CURLE_HTTP_RETURNED_ERROR (22)"
|
|
This is returned if \fICURLOPT_FAILONERROR(3)\fP is set TRUE and the HTTP
|
|
server returns an error code that is >= 400.
|
|
.IP "CURLE_WRITE_ERROR (23)"
|
|
An error occurred when writing received data to a local file, or an error was
|
|
returned to libcurl from a write callback.
|
|
.IP "CURLE_UPLOAD_FAILED (25)"
|
|
Failed starting the upload. For FTP, the server typically denied the STOR
|
|
command. The error buffer usually contains the server's explanation for this.
|
|
.IP "CURLE_READ_ERROR (26)"
|
|
There was a problem reading a local file or an error returned by the read
|
|
callback.
|
|
.IP "CURLE_OUT_OF_MEMORY (27)"
|
|
A memory allocation request failed. This is serious badness and
|
|
things are severely screwed up if this ever occurs.
|
|
.IP "CURLE_OPERATION_TIMEDOUT (28)"
|
|
Operation timeout. The specified time-out period was reached according to the
|
|
conditions.
|
|
.IP "CURLE_FTP_PORT_FAILED (30)"
|
|
The FTP PORT command returned error. This mostly happens when you haven't
|
|
specified a good enough address for libcurl to use. See
|
|
\fICURLOPT_FTPPORT(3)\fP.
|
|
.IP "CURLE_FTP_COULDNT_USE_REST (31)"
|
|
The FTP REST command returned error. This should never happen if the server is
|
|
sane.
|
|
.IP "CURLE_RANGE_ERROR (33)"
|
|
The server does not support or accept range requests.
|
|
.IP "CURLE_HTTP_POST_ERROR (34)"
|
|
This is an odd error that mainly occurs due to internal confusion.
|
|
.IP "CURLE_SSL_CONNECT_ERROR (35)"
|
|
A problem occurred somewhere in the SSL/TLS handshake. You really want the
|
|
error buffer and read the message there as it pinpoints the problem slightly
|
|
more. Could be certificates (file formats, paths, permissions), passwords, and
|
|
others.
|
|
.IP "CURLE_BAD_DOWNLOAD_RESUME (36)"
|
|
The download could not be resumed because the specified offset was out of the
|
|
file boundary.
|
|
.IP "CURLE_FILE_COULDNT_READ_FILE (37)"
|
|
A file given with FILE:// couldn't be opened. Most likely because the file
|
|
path doesn't identify an existing file. Did you check file permissions?
|
|
.IP "CURLE_LDAP_CANNOT_BIND (38)"
|
|
LDAP cannot bind. LDAP bind operation failed.
|
|
.IP "CURLE_LDAP_SEARCH_FAILED (39)"
|
|
LDAP search failed.
|
|
.IP "CURLE_FUNCTION_NOT_FOUND (41)"
|
|
Function not found. A required zlib function was not found.
|
|
.IP "CURLE_ABORTED_BY_CALLBACK (42)"
|
|
Aborted by callback. A callback returned "abort" to libcurl.
|
|
.IP "CURLE_BAD_FUNCTION_ARGUMENT (43)"
|
|
A function was called with a bad parameter.
|
|
.IP "CURLE_INTERFACE_FAILED (45)"
|
|
Interface error. A specified outgoing interface could not be used. Set which
|
|
interface to use for outgoing connections' source IP address with
|
|
\fICURLOPT_INTERFACE(3)\fP.
|
|
.IP "CURLE_TOO_MANY_REDIRECTS (47)"
|
|
Too many redirects. When following redirects, libcurl hit the maximum amount.
|
|
Set your limit with \fICURLOPT_MAXREDIRS(3)\fP.
|
|
.IP "CURLE_UNKNOWN_OPTION (48)"
|
|
An option passed to libcurl is not recognized/known. Refer to the appropriate
|
|
documentation. This is most likely a problem in the program that uses
|
|
libcurl. The error buffer might contain more specific information about which
|
|
exact option it concerns.
|
|
.IP "CURLE_TELNET_OPTION_SYNTAX (49)"
|
|
A telnet option string was Illegally formatted.
|
|
.IP "CURLE_GOT_NOTHING (52)"
|
|
Nothing was returned from the server, and under the circumstances, getting
|
|
nothing is considered an error.
|
|
.IP "CURLE_SSL_ENGINE_NOTFOUND (53)"
|
|
The specified crypto engine wasn't found.
|
|
.IP "CURLE_SSL_ENGINE_SETFAILED (54)"
|
|
Failed setting the selected SSL crypto engine as default!
|
|
.IP "CURLE_SEND_ERROR (55)"
|
|
Failed sending network data.
|
|
.IP "CURLE_RECV_ERROR (56)"
|
|
Failure with receiving network data.
|
|
.IP "CURLE_SSL_CERTPROBLEM (58)"
|
|
problem with the local client certificate.
|
|
.IP "CURLE_SSL_CIPHER (59)"
|
|
Couldn't use specified cipher.
|
|
.IP "CURLE_PEER_FAILED_VERIFICATION (60)"
|
|
The remote server's SSL certificate or SSH md5 fingerprint was deemed not OK.
|
|
This error code has been unified with CURLE_SSL_CACERT since 7.62.0. Its
|
|
previous value was 51.
|
|
.IP "CURLE_BAD_CONTENT_ENCODING (61)"
|
|
Unrecognized transfer encoding.
|
|
.IP "CURLE_LDAP_INVALID_URL (62)"
|
|
Invalid LDAP URL.
|
|
.IP "CURLE_FILESIZE_EXCEEDED (63)"
|
|
Maximum file size exceeded.
|
|
.IP "CURLE_USE_SSL_FAILED (64)"
|
|
Requested FTP SSL level failed.
|
|
.IP "CURLE_SEND_FAIL_REWIND (65)"
|
|
When doing a send operation curl had to rewind the data to retransmit, but the
|
|
rewinding operation failed.
|
|
.IP "CURLE_SSL_ENGINE_INITFAILED (66)"
|
|
Initiating the SSL Engine failed.
|
|
.IP "CURLE_LOGIN_DENIED (67)"
|
|
The remote server denied curl to login (Added in 7.13.1)
|
|
.IP "CURLE_TFTP_NOTFOUND (68)"
|
|
File not found on TFTP server.
|
|
.IP "CURLE_TFTP_PERM (69)"
|
|
Permission problem on TFTP server.
|
|
.IP "CURLE_REMOTE_DISK_FULL (70)"
|
|
Out of disk space on the server.
|
|
.IP "CURLE_TFTP_ILLEGAL (71)"
|
|
Illegal TFTP operation.
|
|
.IP "CURLE_TFTP_UNKNOWNID (72)"
|
|
Unknown TFTP transfer ID.
|
|
.IP "CURLE_REMOTE_FILE_EXISTS (73)"
|
|
File already exists and will not be overwritten.
|
|
.IP "CURLE_TFTP_NOSUCHUSER (74)"
|
|
This error should never be returned by a properly functioning TFTP server.
|
|
.IP "CURLE_CONV_FAILED (75)"
|
|
Character conversion failed.
|
|
.IP "CURLE_CONV_REQD (76)"
|
|
Caller must register conversion callbacks.
|
|
.IP "CURLE_SSL_CACERT_BADFILE (77)"
|
|
Problem with reading the SSL CA cert (path? access rights?)
|
|
.IP "CURLE_REMOTE_FILE_NOT_FOUND (78)"
|
|
The resource referenced in the URL does not exist.
|
|
.IP "CURLE_SSH (79)"
|
|
An unspecified error occurred during the SSH session.
|
|
.IP "CURLE_SSL_SHUTDOWN_FAILED (80)"
|
|
Failed to shut down the SSL connection.
|
|
.IP "CURLE_AGAIN (81)"
|
|
Socket is not ready for send/recv wait till it's ready and try again. This
|
|
return code is only returned from \fIcurl_easy_recv(3)\fP and
|
|
\fIcurl_easy_send(3)\fP (Added in 7.18.2)
|
|
.IP "CURLE_SSL_CRL_BADFILE (82)"
|
|
Failed to load CRL file (Added in 7.19.0)
|
|
.IP "CURLE_SSL_ISSUER_ERROR (83)"
|
|
Issuer check failed (Added in 7.19.0)
|
|
.IP "CURLE_FTP_PRET_FAILED (84)"
|
|
The FTP server does not understand the PRET command at all or does not support
|
|
the given argument. Be careful when using \fICURLOPT_CUSTOMREQUEST(3)\fP, a
|
|
custom LIST command will be sent with PRET CMD before PASV as well. (Added in
|
|
7.20.0)
|
|
.IP "CURLE_RTSP_CSEQ_ERROR (85)"
|
|
Mismatch of RTSP CSeq numbers.
|
|
.IP "CURLE_RTSP_SESSION_ERROR (86)"
|
|
Mismatch of RTSP Session Identifiers.
|
|
.IP "CURLE_FTP_BAD_FILE_LIST (87)"
|
|
Unable to parse FTP file list (during FTP wildcard downloading).
|
|
.IP "CURLE_CHUNK_FAILED (88)"
|
|
Chunk callback reported error.
|
|
.IP "CURLE_NO_CONNECTION_AVAILABLE (89)"
|
|
(For internal use only, will never be returned by libcurl) No connection
|
|
available, the session will be queued. (added in 7.30.0)
|
|
.IP "CURLE_SSL_PINNEDPUBKEYNOTMATCH (90)"
|
|
Failed to match the pinned key specified with \fICURLOPT_PINNEDPUBLICKEY(3)\fP.
|
|
.IP "CURLE_SSL_INVALIDCERTSTATUS (91)"
|
|
Status returned failure when asked with \fICURLOPT_SSL_VERIFYSTATUS(3)\fP.
|
|
.IP "CURLE_HTTP2_STREAM (92)"
|
|
Stream error in the HTTP/2 framing layer.
|
|
.IP "CURLE_RECURSIVE_API_CALL (93)"
|
|
An API function was called from inside a callback.
|
|
.IP "CURLE_AUTH_ERROR (94)"
|
|
An authentication function returned an error.
|
|
.IP "CURLE_HTTP3 (95)"
|
|
A problem was detected in the HTTP/3 layer. This is somewhat generic and can
|
|
be one out of several problems, see the error buffer for details.
|
|
.IP "CURLE_QUIC_CONNECT_ERROR (96)"
|
|
QUIC connection error. This error may be caused by an SSL library error. QUIC
|
|
is the protocol used for HTTP/3 transfers.
|
|
.IP "CURLE_SSL_CLIENTCERT (98)"
|
|
SSL Client Certificate required.
|
|
.IP "CURLE_OBSOLETE*"
|
|
These error codes will never be returned. They were used in an old libcurl
|
|
version and are currently unused.
|
|
.SH "CURLMcode"
|
|
This is the generic return code used by functions in the libcurl multi
|
|
interface. Also consider \fIcurl_multi_strerror(3)\fP.
|
|
.IP "CURLM_CALL_MULTI_PERFORM (-1)"
|
|
This is not really an error. It means you should call
|
|
\fIcurl_multi_perform(3)\fP again without doing select() or similar in
|
|
between. Before version 7.20.0 (released on February 9 2010) this could be returned by
|
|
\fIcurl_multi_perform(3)\fP, but in later versions this return code is never
|
|
used.
|
|
.IP "CURLM_CALL_MULTI_SOCKET (-1)"
|
|
An alias for CURLM_CALL_MULTI_PERFORM. Never returned by modern libcurl
|
|
versions.
|
|
.IP "CURLM_OK (0)"
|
|
Things are fine.
|
|
.IP "CURLM_BAD_HANDLE (1)"
|
|
The passed-in handle is not a valid CURLM handle.
|
|
.IP "CURLM_BAD_EASY_HANDLE (2)"
|
|
An easy handle was not good/valid. It could mean that it isn't an easy handle
|
|
at all, or possibly that the handle already is in use by this or another multi
|
|
handle.
|
|
.IP "CURLM_OUT_OF_MEMORY (3)"
|
|
You are doomed.
|
|
.IP "CURLM_INTERNAL_ERROR (4)"
|
|
This can only be returned if libcurl bugs. Please report it to us!
|
|
.IP "CURLM_BAD_SOCKET (5)"
|
|
The passed-in socket is not a valid one that libcurl already knows about.
|
|
(Added in 7.15.4)
|
|
.IP "CURLM_UNKNOWN_OPTION (6)"
|
|
curl_multi_setopt() with unsupported option
|
|
(Added in 7.15.4)
|
|
.IP "CURLM_ADDED_ALREADY (7)"
|
|
An easy handle already added to a multi handle was attempted to get added a
|
|
second time. (Added in 7.32.1)
|
|
.IP "CURLM_RECURSIVE_API_CALL (8)"
|
|
An API function was called from inside a callback.
|
|
.IP "CURLM_WAKEUP_FAILURE (9)"
|
|
Wakeup is unavailable or failed.
|
|
.IP "CURLM_BAD_FUNCTION_ARGUMENT (10)"
|
|
A function was called with a bad parameter.
|
|
.SH "CURLSHcode"
|
|
The "share" interface will return a CURLSHcode to indicate when an error has
|
|
occurred. Also consider \fIcurl_share_strerror(3)\fP.
|
|
.IP "CURLSHE_OK (0)"
|
|
All fine. Proceed as usual.
|
|
.IP "CURLSHE_BAD_OPTION (1)"
|
|
An invalid option was passed to the function.
|
|
.IP "CURLSHE_IN_USE (2)"
|
|
The share object is currently in use.
|
|
.IP "CURLSHE_INVALID (3)"
|
|
An invalid share object was passed to the function.
|
|
.IP "CURLSHE_NOMEM (4)"
|
|
Not enough memory was available.
|
|
(Added in 7.12.0)
|
|
.IP "CURLSHE_NOT_BUILT_IN (5)"
|
|
The requested sharing could not be done because the library you use don't have
|
|
that particular feature enabled. (Added in 7.23.0)
|
|
.SH "CURLUcode"
|
|
.IP "CURLUE_BAD_HANDLE (1)"
|
|
An argument that should be a CURLU pointer was passed in as a NULL.
|
|
.IP "CURLUE_BAD_PARTPOINTER (2)"
|
|
A NULL pointer was passed to the 'part' argument of \fIcurl_url_get(3)\fP.
|
|
.IP "CURLUE_MALFORMED_INPUT (3)"
|
|
A malformed input was passed to a URL API function.
|
|
.IP "CURLUE_BAD_PORT_NUMBER (4)"
|
|
The port number was not a decimal number between 0 and 65535.
|
|
.IP "CURLUE_UNSUPPORTED_SCHEME (5)"
|
|
This libcurl build doesn't support the given URL scheme.
|
|
.IP "CURLUE_URLDECODE (6)"
|
|
URL decode error, most likely because of rubbish in the input.
|
|
.IP "CURLUE_OUT_OF_MEMORY (7)"
|
|
A memory function failed.
|
|
.IP "CURLUE_USER_NOT_ALLOWED (8)"
|
|
Credentials was passed in the URL when prohibited.
|
|
.IP "CURLUE_UNKNOWN_PART (9)"
|
|
An unknown part ID was passed to a URL API function.
|
|
.IP "CURLUE_NO_SCHEME (10)"
|
|
There is no scheme part in the URL.
|
|
.IP "CURLUE_NO_USER (11)"
|
|
There is no user part in the URL.
|
|
.IP "CURLUE_NO_PASSWORD (12)"
|
|
There is no password part in the URL.
|
|
.IP "CURLUE_NO_OPTIONS (13)"
|
|
There is no options part in the URL.
|
|
.IP "CURLUE_NO_HOST (14)"
|
|
There is no host part in the URL.
|
|
.IP "CURLUE_NO_PORT (15)"
|
|
There is no port part in the URL.
|
|
.IP "CURLUE_NO_QUERY (16)"
|
|
There is no query part in the URL.
|
|
.IP "CURLUE_NO_FRAGMENT (17)"
|
|
There is no fragment part in the URL.
|
|
.SH "SEE ALSO"
|
|
.BR curl_easy_strerror "(3), " curl_multi_strerror "(3), "
|
|
.BR curl_share_strerror "(3), " CURLOPT_ERRORBUFFER "(3), "
|
|
.BR CURLOPT_VERBOSE "(3), " CURLOPT_DEBUGFUNCTION "(3) "
|