ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

curl 报 Protocol xxx not supported or disabled in libcurl 怎么排查?

curl 报 Protocol xxx not supported or disabled in libcurl 怎么排查? curl 报 Protocol xxx not supported or disabled in libcurl 怎么排查【免费下载链接】curlA command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. libcurl offers a myriad of powerful features项目地址: https://gitcode.com/GitHub_Trending/cu/curl用 curl 访问某个 URL 时收到类似下面的报错Protocol xxx not supported or disabled in libcurl根据 docs/FAQ.md 的说明这条报错的措辞是固定的因为 curl 内部不区分两种情况协议根本没有被写进这个 libcurlnever got any code added还是被显式禁用了。curl 可以被构建成只支持一组指定的协议其余协议在这个构建里就是disabled 或 not supported。除了这两种构建层面的原因FAQ 还指出另一种常见情况URL 的协议部分拼写错误或协议部分前面多了空格。排查顺序就是先排除 URL 本身的问题再确认这个构建是否真的支持该协议。第一步检查 URL 拼写与前置空格这是 FAQ 中特别提到、且最容易忽略的原因协议部分拼错例如文档示例中的htpts://example.com就会得到Protocol htpts not supported or disabled in libcurl这类报错协议部分前面带了一个空格例如 https://example.com/这种错误更隐蔽通常来自配置文件或复制粘贴时带入的前导空格。对照报错中的xxx即 curl 实际读到的协议名逐字符核对 URL 的 scheme 部分并确认 URL 开头没有空格。如果 URL 来自配置项或变量检查赋值处是否混入了空白字符。这一步不需要任何额外命令修正后重跑原命令即可验证。第二步用curl --version确认该构建支持的协议如果 URL 拼写无误就检查当前这个 curl 二进制文件是否包含该协议的代码。按 docs/cmdline-opts/version.md 的说明运行curl --version输出中第三行以Protocols:开头列出这个 libcurl 报告支持的全部协议第四行以Features:开头列出构建时启用的特性如SSL、HTTP2等。判断方式把报错中的协议名与Protocols:行对照。协议名在列表中说明该构建支持它问题多半出在 URL 拼写、前导空格或你通过命令行选项自行禁用了它见下一节协议名不在列表中说明这个构建就没有编译该协议命令行层面无法补救需要换一个包含该协议的 curl 构建或自行重新编译。哪些协议可以在构建期被关掉是有据可查的docs/CURL-DISABLE.md 列出了对应的构建定义例如CURL_DISABLE_FTP禁用 FTP和 FTPS、CURL_DISABLE_HTTP禁用 HTTP(S) 协议并会连带禁用 HTTP proxy 支持、CURL_DISABLE_TELNET禁用 TELNET、CURL_DISABLE_TFTP禁用 TFTP、CURL_DISABLE_POP3禁用 POP3 等。如果你是自己编译的检查构建时使用的这些CURL_DISABLE_*定义如果是系统包或第三方构建则按 docs/INSTALL.md 所述的构建/安装方式重新获得一个包含目标协议的构建。如果你用--proto/--proto-default限制过协议报错文案里的 disabled 也可能来自命令行自身的协议限制检查这两处--proto-default protocol用于给没有 scheme 的 URL 指定默认协议。docs/cmdline-opts/proto-default.md 明确写道unknown or unsupported protocol causes errorCURLE_UNSUPPORTED_PROTOCOL。注意该选项的值不能设为ipfs或ipns这两种 scheme 必须显式写在 URL 里。--proto用于限定本次传输允许使用的协议按逗号分隔、从左到右求值修饰符含义见 docs/cmdline-opts/proto.md默认无修饰符或表示允许该协议-表示从允许列表中移除表示只允许该协议。例如--proto -ftps # 用默认协议列表但禁用 ftps --proto -all,https,http # 只启用 http 和 https --proto http,https # 只启用 http 和 https如果你用之类把列表收窄过再访问列表外的协议 URL 自然会被拒绝报错信息里的协议名就是被拒绝的那一个。把该协议加回允许列表或去掉限制后重跑即可验证。另外该文档说明对--proto里填写的未知或已禁用协议只会产生 warning不会直接报错所以这一选项本身通常不是这条报错的直接来源但收窄后的列表会约束你的 URL。在 libcurl API 中对应同一错误码如果你的程序是链接 libcurl 而不是调用 curl 命令对应的错误码是CURLE_UNSUPPORTED_PROTOCOL值为 1。docs/libcurl/libcurl-errors.md 的解释与 FAQ 一致URL 使用了这个 libcurl 不支持的协议support might be a compile-time option that you did not use, it can be a misspelled protocol string or a protocol libcurl has no code for——即编译期选项未启用、协议字符串拼错、或 libcurl 本来就没有该协议的代码三种原因之一。用 libcurl 时排查顺序相同先检查传给CURLOPT_URL的 URL 协议部分拼写再用与curl --version等价的构建信息确认协议支持情况。另外注意如果你用CURLOPT_PROTOCOLS_STR或CURLOPT_REDIR_PROTOCOLS_STR限定过协议按 docs/libcurl/opts/CURLOPT_PROTOCOLS_STR.md 的说法列出的协议如果不支持或被禁用同样会返回CURLE_UNSUPPORTED_PROTOCOL此时应检查这两个选项里填写的协议名。什么时候可以判定问题已解决按上面的路径走完满足以下条件即视为完成排查URL 协议部分拼写正确、无前导空格curl --version输出的Protocols:行中包含该协议命令行或 libcurl 选项中--proto、--proto-default、CURLOPT_PROTOCOLS_STR等没有把该协议排除。若第 2 条不成立剩下的就是构建问题该协议没有编译进这个 libcurl需更换或重新构建 curl命令行层面无法绕过。【免费下载链接】curlA command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. libcurl offers a myriad of powerful features项目地址: https://gitcode.com/GitHub_Trending/cu/curl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表