CURL错误代码及含义(英文)

本文详细介绍了libcurl中各种错误代码及其可能的原因,包括HTTP、FTP等不同协议下的错误情况,以及如何解决这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://blog.youkuaiyun.com/sandro_zhang/article/details/6837488


NAME

libcurl-errors - error codes in libcurl

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.

CURLcode

Almost all "easy" interface functions return a CURLcode error code. No matter what, using the curl_easy_setopt(3) option CURLOPT_ERRORBUFFER 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. curl_easy_strerror(3) can be called to get an error string from a given CURLcode number.

CURLcode is one of the following:

CURLE_OK (0)

All fine. Proceed as usual.

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.

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.

CURLE_URL_MALFORMAT (3)

The URL was not properly formatted.

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.

CURLE_COULDNT_RESOLVE_PROXY (5)

Couldn't resolve proxy. The given proxy host could not be resolved.

CURLE_COULDNT_RESOLVE_HOST (6)

Couldn't resolve host. The given remote host was not resolved.

CURLE_COULDNT_CONNECT (7)

Failed to connect() to host or proxy.

CURLE_FTP_WEIRD_SERVER_REPLY (8)

After connecting to a FTP server, libcurl expects to get a certain reply back. This error code implies that it got a strange or bad reply. The given remote server is probably not an OK FTP server.

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.

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.

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.

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.

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 CURLOPT_CUSTOMREQUEST, a custom LIST command will be sent with PRET CMD before PASV as well. (Added in 7.20.0)

CURLE_FTP_CANT_GET_HOST (15)

An internal failure to lookup the host used for the new connection.

CURLE_FTP_COULDNT_SET_TYPE (17)

Received an error when trying to set the transfer mode to binary or ASCII.

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.

CURLE_FTP_COULDNT_RETR_FILE (19)

This was either a weird reply to a 'RETR' command or a zero byte transfer complete.

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.

CURLE_HTTP_RETURNED_ERROR (22)

This is returned if CURLOPT_FAILONERROR is set TRUE and the HTTP server returns an error code that is >= 400.

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.

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.

CURLE_READ_ERROR (26)

There was a problem reading a local file or an error returned by the read callback.

CURLE_OUT_OF_MEMORY (27)

A memory allocation request failed. This is serious badness and things are severely screwed up if this ever occurs.

CURLE_OPERATION_TIMEDOUT (28)

Operation timeout. The specified time-out period was reached according to the conditions.

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 CURLOPT_FTPPORT.

CURLE_FTP_COULDNT_USE_REST (31)

The FTP REST command returned error. This should never happen if the server is sane.

CURLE_RANGE_ERROR (33)

The server does not support or accept range requests.

CURLE_HTTP_POST_ERROR (34)

This is an odd error that mainly occurs due to internal confusion.

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.

CURLE_BAD_DOWNLOAD_RESUME (36)

The download could not be resumed because the specified offset was out of the file boundary.

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?

CURLE_LDAP_CANNOT_BIND (38)

LDAP cannot bind. LDAP bind operation failed.

CURLE_LDAP_SEARCH_FAILED (39)

LDAP search failed.

CURLE_FUNCTION_NOT_FOUND (41)

Function not found. A required zlib function was not found.

CURLE_ABORTED_BY_CALLBACK (42)

Aborted by callback. A callback returned "abort" to libcurl.

CURLE_BAD_FUNCTION_ARGUMENT (43)

Internal error. A function was called with a bad parameter.

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 CURLOPT_INTERFACE.

CURLE_TOO_MANY_REDIRECTS (47)

Too many redirects. When following redirects, libcurl hit the maximum amount. Set your limit with CURLOPT_MAXREDIRS.

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.

CURLE_TELNET_OPTION_SYNTAX (49)

A telnet option string was Illegally formatted.

CURLE_PEER_FAILED_VERIFICATION (51)

The remote server's SSL certificate or SSH md5 fingerprint was deemed not OK.

CURLE_GOT_NOTHING (52)

Nothing was returned from the server, and under the circumstances, getting nothing is considered an error.

CURLE_SSL_ENGINE_NOTFOUND (53)

The specified crypto engine wasn't found.

CURLE_SSL_ENGINE_SETFAILED (54)

Failed setting the selected SSL crypto engine as default!

CURLE_SEND_ERROR (55)

Failed sending network data.

CURLE_RECV_ERROR (56)

Failure with receiving network data.

CURLE_SSL_CERTPROBLEM (58)

problem with the local client certificate.

CURLE_SSL_CIPHER (59)

Couldn't use specified cipher.

CURLE_SSL_CACERT (60)

Peer certificate cannot be authenticated with known CA certificates.

CURLE_BAD_CONTENT_ENCODING (61)

Unrecognized transfer encoding.

CURLE_LDAP_INVALID_URL (62)

Invalid LDAP URL.

CURLE_FILESIZE_EXCEEDED (63)

Maximum file size exceeded.

CURLE_USE_SSL_FAILED (64)

Requested FTP SSL level failed.

CURLE_SEND_FAIL_REWIND (65)

When doing a send operation curl had to rewind the data to retransmit, but the rewinding operation failed.

CURLE_SSL_ENGINE_INITFAILED (66)

Initiating the SSL Engine failed.

CURLE_LOGIN_DENIED (67)

The remote server denied curl to login (Added in 7.13.1)

CURLE_TFTP_NOTFOUND (68)

File not found on TFTP server.

CURLE_TFTP_PERM (69)

Permission problem on TFTP server.

CURLE_REMOTE_DISK_FULL (70)

Out of disk space on the server.

CURLE_TFTP_ILLEGAL (71)

Illegal TFTP operation.

CURLE_TFTP_UNKNOWNID (72)

Unknown TFTP transfer ID.

CURLE_REMOTE_FILE_EXISTS (73)

File already exists and will not be overwritten.

CURLE_TFTP_NOSUCHUSER (74)

This error should never be returned by a properly functioning TFTP server.

CURLE_CONV_FAILED (75)

Character conversion failed.

CURLE_CONV_REQD (76)

Caller must register conversion callbacks.

CURLE_SSL_CACERT_BADFILE (77)

Problem with reading the SSL CA cert (path? access rights?)

CURLE_REMOTE_FILE_NOT_FOUND (78)

The resource referenced in the URL does not exist.

CURLE_SSH (79)

An unspecified error occurred during the SSH session.

CURLE_SSL_SHUTDOWN_FAILED (80)

Failed to shut down the SSL connection.

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 curl_easy_recv(3) and curl_easy_send(3) (Added in 7.18.2)

CURLE_SSL_CRL_BADFILE (82)

Failed to load CRL file (Added in 7.19.0)

CURLE_SSL_ISSUER_ERROR (83)

Issuer check failed (Added in 7.19.0)

CURLE_FTP_PRET_FAILED (84)

PRET command failed

CURLE_RTSP_CSEQ_ERROR (85)

Mismatch of RTSP CSeq numbers.

CURLE_RTSP_SESSION_ERROR (86)

Mismatch of RTSP Session Identifiers.

CURLE_FTP_BAD_FILE_LIST (87)

Unable to parse FTP file list (during FTP wildcard downloading).

CURLE_CHUNK_FAILED (88)

Chunk callback reported error.

CURLE_OBSOLETE*

These error codes will never be returned. They were used in an old libcurl version and are currently unused.

CURLMcode

This is the generic return code used by functions in the libcurl multi interface. Also consider curl_multi_strerror(3).

CURLM_CALL_MULTI_PERFORM (-1)

This is not really an error. It means you should call curl_multi_perform(3) again without doing select() or similar in between.

CURLM_OK (0)

Things are fine.

CURLM_BAD_HANDLE (1)

The passed-in handle is not a valid CURLM handle.

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 used by this or another multi handle.

CURLM_OUT_OF_MEMORY (3)

You are doomed.

CURLM_INTERNAL_ERROR (4)

This can only be returned if libcurl bugs. Please report it to us!

CURLM_BAD_SOCKET (5)

The passed-in socket is not a valid one that libcurl already knows about. (Added in 7.15.4)

CURLM_UNKNOWN_OPTION (6)

curl_multi_setopt() with unsupported option (Added in 7.15.4)

CURLSHcode

The "share" interface will return a CURLSHcode to indicate when an error has occurred. Also consider curl_share_strerror(3).

CURLSHE_OK (0)

All fine. Proceed as usual.

CURLSHE_BAD_OPTION (1)

An invalid option was passed to the function.

CURLSHE_IN_USE (2)

The share object is currently in use.

CURLSHE_INVALID (3)

An invalid share object was passed to the function.

CURLSHE_NOMEM (4)

Not enough memory was available. (Added in 7.12.0)


struct curl_httppost* formpost = NULL; struct curl_httppost* lastptr = NULL; //传递背景图 curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "uploaded_image", CURLFORM_FILE, par._uploaded_image.c_str(), CURLFORM_END); if (!par._style_image.empty()) { curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "style_image", CURLFORM_FILE, par._style_image.c_str(), CURLFORM_END); } std::string strStyle = std::to_string((_Longlong)par._style_enum); curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "style_enum", CURLFORM_COPYCONTENTS, strStyle.c_str(), CURLFORM_END); std::string strStyleWeight = std::to_string((long double)par._style_weight); curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "style_weight", CURLFORM_COPYCONTENTS, strStyleWeight.c_str(), CURLFORM_END); struct curl_slist* headerlist = NULL; static const char buf[] = "Expect:"; /* initalize custom header list (stating that Expect: 100-continue is not wanted */ headerlist = curl_slist_append(headerlist, buf); CURL* curl = curl_easy_init(); if (curl) { /* what URL that receives this POST */ std::string strUrl; if (par._request_type != "images_to_3d" && par._request_type != "text_to_3d") strUrl = m_strUrl + "/upload-image"; else strUrl = "http://192.168.0.64:10080/3d"; DPrintf("PostRequest strUrl=%s request_type=%s request_p_prompt=%s\n", strUrl.c_str(), par._request_type.c_str(), par._p_prompt.c_str()); curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str()); //if ((argc == 2) && (!strcmp(argv[1], "noexpectheader"))) /* only disable 100-continue header if explicitly requested */ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist); curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteDataCallback); int timeout = 600; curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout); std::string strResponse = ""; curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&strResponse); //curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); //struct curl_slist* headers = NULL; //headers = curl_slist_append(headers, "User-Agent: Apipost/8 (https://www.apipost.cn)"); //curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); /* Perform the request, res will get the return code */ CURLcode res = curl_easy_perform(curl); /* Check for errors */ DPrintf("错误状态 res =%d", res); if (res != CURLE_OK) { //strError = curl_easy_strerror(res); if (CURLE_HTTP2 > res) { strError = _T("无法连接到主机或代理!"); } else { strError = _T("读取数据发生未知错误!"); } } 这段代码中是一个请求传递,传递的表单第一个数据uploaded_image是一个文件地址,但是这个文件地址有时候 对传入的中午路径,请求返回26的错误;但是对个别中午路径却可以正确传递过去,现在可以保证的是文件是存在的并且文件路径没有错误,该如何解决这个问题
03-08
<think>我们正在处理一个YUM安装过程中出现的Curl错误(37),具体错误信息是“couldn'treadfile://metadatarepository”。根据用户提供的引用信息,特别是引用[4]中提到的解决方案,我们可以推断这个问题可能与CentOS8的官方源停止维护有关,但错误类型不同。错误37(CURLE_FILE_COULDNT_READ_FILE)通常表示无法读取本地文件系统中的文件。根据用户的问题,错误信息指向的是file://协议,这意味着YUM试图从本地文件系统读取元数据,但失败了。可能的原因包括:1.仓库配置文件(.repo文件)中配置了一个file://路径,但该路径不存在或不可读。2.本地仓库的元数据损坏或缺失。解决步骤:1.检查仓库配置:查看/etc/yum.repos.d/目录下的.repo文件,确认是否有仓库使用file://作为baseurl,并检查该路径是否存在。2.如果存在这样的仓库,并且是本地仓库(如从光盘挂载等),确保该路径可访问且包含正确的仓库数据。3.如果该仓库不再需要,可以禁用或删除该仓库配置。4.如果问题仍然存在,尝试清除YUM缓存并重新生成。然而,用户之前的问题中引用的错误是Curl错误(6)(无法解析主机),而现在是错误(37)。所以我们需要针对错误37提供解决方案。具体操作步骤:步骤1:检查仓库配置文件中是否有file://路径使用以下命令查看所有启用的仓库中是否有使用file://协议的:grep-r"baseurl=file://"/etc/yum.repos.d/如果找到,记下该仓库的名称和文件路径。步骤2:检查文件路径是否存在且可读例如,如果仓库配置为:baseurl=file:///mnt/localrepo那么确保/mnt/localrepo目录存在,并且包含repodata目录,且该目录下的文件可读。步骤3:如果路径不存在或不可读,则修正路径或删除该仓库配置如果该仓库是无效的,可以编辑对应的.repo文件,将该仓库设置为enabled=0,或者删除该仓库配置文件。步骤4:清除缓存并重新生成yumcleanallyummakecache如果问题依旧,可以尝试更新curl和yum:yumupdatecurlyumupdateyum但注意,如果yum本身无法运行,可能需要先修复仓库配置(比如使用其他可用的仓库)才能更新。另外,根据引用[4]中的信息,如果是因为CentOS8官方源停止维护导致的问题,可能需要将仓库的baseurl改为vault.centos.org(针对CentOS8)。但当前错误是file://,所以先解决本地仓库的问题。如果用户没有配置本地仓库,却出现了file://的错误,可能是某个仓库配置文件错误地将baseurl设置成了file://。这时需要找到并修改或删除该配置。示例操作:1.进入仓库配置目录:cd/etc/yum.repos.d/2.检查所有.repo文件,查找包含“baseurl=file://”的行,并修改或注释掉这些行(如果不需要本地仓库的话)。3.或者,如果确实需要本地仓库,确保路径正确并挂载了对应的存储介质。4.然后执行:yumcleanallyummakecache5.再尝试安装软件。如果问题仍然存在,请提供具体的错误信息和仓库配置文件内容以便进一步诊断。根据用户提供的引用,特别是引用[4]中提到的CentOS8停止维护的解决方案,如果用户使用的是CentOS8,并且除了本地仓库错误外还遇到官方源的问题,那么可以同时应用引用[4]的解决方案,即修改官方仓库的baseurl为vault.centos.org。针对CentOS8的官方仓库修复(如果同时存在官方仓库错误):sed-i's/mirrorlist/#mirrorlist/g'/etc/yum.repos.d/CentOS-*sed-i's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g'/etc/yum.repos.d/CentOS-*但注意:这个操作只针对官方仓库(如BaseOS,AppStream等),不针对本地仓库。所以如果错误是file://引起的,那么应该先解决本地仓库的问题。由于用户当前的错误是Curl(37)关于file://,所以我们首先解决本地仓库的问题。如果用户没有配置本地仓库,那么可能是某个第三方仓库错误地使用了file://。例如,epel仓库通常不会使用file://,所以需要检查是否有错误的配置。生成相关问题:1.如何检查YUM仓库配置是否正确?2.如何设置本地YUM仓库?3.如何解决YUM更新过程中的其他Curl错误?4.CentOS8停止维护后,如何继续使用YUM?</think>### 解决YUM安装中Curl错误(37):无法读取file://元数据 #### 问题分析 当YUM报错 `Curl error (37): Couldn't read file:// metadata repository` 时,表明YUM无法读取本地文件系统中的仓库元数据。常见原因包括: 1. **本地仓库路径配置错误**:`file://` 指向的路径不存在或不可访问 2. **缓存文件损坏**:`/var/cache/yum` 中的元数据缓存异常 3. **权限问题**:YUM进程无权限读取目标目录 4. **仓库文件冲突**:`.repo` 配置中包含无效的本地仓库 #### 解决方案 按顺序执行以下步骤: ##### 步骤1:检查本地仓库配置 ```bash # 查看所有启用仓库的配置 grep -r "enabled=1" /etc/yum.repos.d/* # 检查file://路径是否存在 ls -l /path/in/repo/config # 替换为实际路径 ``` - 若路径不存在:修正 `.repo` 文件中的 `baseurl=file://...` 路径 - 若无需本地仓库:将 `enabled=1` 改为 `enabled=0` ##### 步骤2:清理YUM缓存 ```bash sudo yum clean all # 清理所有缓存 sudo rm -rf /var/cache/yum # 强制删除缓存目录 sudo yum makecache # 重建缓存 ``` ##### 步骤3:修复文件权限 ```bash # 确保YUM可访问相关目录 sudo chown -R root:root /etc/yum.repos.d sudo chmod -R 755 /var/cache/yum ``` ##### 步骤4:验证仓库可用性 ```bash # 测试单个仓库 sudo yum --disablerepo="*" --enablerepo="base" list available ``` ##### 步骤5:临时禁用问题仓库 编辑问题仓库的 `.repo` 文件: ```ini [problem-repo] name=Local Repository baseurl=file:///invalid/path # 注释或删除此行 enabled=0 # 改为禁用 ``` #### 注意事项 1. **CentOS 8特殊处理**:若系统是CentOS 8,需同步修正官方源(因官方已停止维护): ```bash sudo sed -i 's|mirror.centos.org|vault.centos.org|g' /etc/yum.repos.d/* ``` 2. **防火墙限制**:确保SELinux未阻止访问: ```bash sudo setenforce 0 # 临时禁用 sudo yum install [package] ``` #### 典型成功案例 ```bash [root@server ~]# yum clean all Cleaning repos: base epel Cleaning cache [root@server ~]# rm -rf /var/cache/yum/* [root@server ~]# yum makecache Metadata cache created. [root@server ~]# yum install curl Installed successfully! ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值