【问题标题】:curl : (1) Protocol https not supported or disabled in libcurlcurl : (1) 在 libcurl 中不支持或禁用协议 https
【发布时间】:2011-10-16 14:43:40
【问题描述】:

我正在尝试在 Ubuntu 11.04 上安装 Rails 环境。当我启动命令rvm install 1.9.2 --with-openssl-dir=/usr/local 时收到以下错误:

curl : (1) Protocol https not supported or disabled in libcurl

如何解决?

【问题讨论】:

  • 如果不使用--with-openssl-dir=/usr/local(即简单地rvm install 1.9.2)会怎样?
  • 同样的问题,我认为 --with... 是一种解决方法
  • 我很难相信你的 curl 不支持 HTTPS。 rvm 可能带有自己的 curl,或者您没有安装 curl (sudo apt-get install curl)。试试curl -o "google.html" https://google.com 看看是否支持HTTPS。
  • 我收到与RCurl 相同的错误消息。
  • 很惊讶这个答案没有被接受。

标签: ruby-on-rails curl openssl libcurl ubuntu-11.04


【解决方案1】:

我的问题是由未显示的 UTF 符号引起的。我从浏览器中复制了链接(在我的例子中是nginx track)并在剪贴板中得到了以下内容:

$ echo -n "​https://sk.ee/upload/files/ESTEID-SK_2015.pem.crt" | hexdump -C
00000000  e2 80 8b 68 74 74 70 73  3a 2f 2f 73 6b 2e 65 65  |...https://sk.ee|
00000010  2f 75 70 6c 6f 61 64 2f  66 69 6c 65 73 2f 45 53  |/upload/files/ES|
00000020  54 45 49 44 2d 53 4b 5f  32 30 31 35 2e 70 65 6d  |TEID-SK_2015.pem|
00000030  2e 63 72 74                                       |.crt|

问题出在0xe2 0x80 0x8b 的序列中,它位于https 之前。此序列是以 UTF-8 编码的ZERO WIDTH JOINER

【讨论】:

    【解决方案2】:

    就我而言,libcurl 一开始就不支持 HTTPS 协议。为了找出支持哪些协议,哪些不支持,我使用命令检查了 curl 版本:

    curl --version
    

    它提供的信息如下: curl 7.50.3 (x86_64-apple-darwin15.6.0) libcurl/7.50.3 SecureTransport zlib/1.2.5 协议: dict 文件 ftp ftps gopher http imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 特征: IPv6 Largefile NTLM NTLM_WB SSL libz UnixSockets

    恰好不支持 https 协议的地方。

    然后我重新安装 curl 并使用以下命令安装它(解压后):

    ./configure --with-darwinssl (在mac中启用ssl通信) 制作 做测试 须藤制作安装

    经过几分钟的工作,问题解决了!

    然后我重新运行 curl version 命令,它显示:

    curl 7.50.3 (x86_64-apple-darwin15.6.0) libcurl/7.50.3 SecureTransport zlib/1.2.5 协议: dict 文件 ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 特征: IPv6 Largefile NTLM NTLM_WB SSL libz UnixSockets

    HTTPS 协议出现了!

    最后,当您遇到 curl 问题时,可以参考一个有用的网站。 https://curl.haxx.se/docs/install.html

    【讨论】:

      【解决方案3】:

      使用标志 --with-darwinssl 解决了这个问题

      使用 curl 源代码进入文件夹

      在此处下载https://curl.haxx.se/download.html

      sudo ./configure --with-darwinssl
      make
      make install
      

      重启你的控制台就完成了!

      【讨论】:

        【解决方案4】:

        看起来已经有很多答案了,但我遇到的问题是双引号。 两者之间有区别:

        "
        

        将第一个双引号更改为第二个对我有用,下面是示例 curl:

        curl -X PUT -u xxx:xxx -T test.txt "https://test.com/test/test.txt"
        

        【讨论】:

        • 当然是我的男人。
        • 这个解决了我的问题。
        • 很高兴它修复了:)。
        • 也为我修复了它。过去没有看到其他使用 https 的 curl 请求出现此错误,所以想知道
        • 很高兴知道阿努帕姆
        【解决方案5】:

        我遇到了这个问题,结果发现https 之前有一个空格导致了这个问题。 " https://""https://"

        【讨论】:

        • 我也一样。我很惊讶为什么我会收到这个错误。 :) +1 分享这个。
        • 对我来说类似,它是一个单引号,因为我们用单引号包裹了一个默认的 bash 值,尽管这不是必需的......
        • 令人惊讶的是,这显然是很多人的问题 - 包括我自己。这种事情时有发生,但似乎有点晦涩难懂。呃,好吧。谢谢
        • 这对我来说是个问题。谢谢@jbrahy
        • 是的,我也一样。通过删除空间,它对我来说效果很好。
        【解决方案6】:

        在 url 中指定协议可能会解决您的问题。

        我遇到了类似的问题(使用 curl php 客户端时):

        我传递的是 domain.com 而不是 sftp://domain.com 这导致了这个令人困惑的错误:

        libcurl 中不支持或禁用协议“http”,耗时 0 秒。

        【讨论】:

          【解决方案7】:

          得到答案HERE 用于 Windows, 它在那里说:

          curl -XPUT 'http://localhost:9200/api/twittervnext/tweet'
          

          糟糕,第一次尝试已经出错了:

          curl: (1) Protocol 'http not supported or disabled in libcurl
          

          这个错误的原因有点愚蠢,Windows 不喜欢你在命令中使用单引号。所以正确的命令是:

          curl –XPUT "http://localhost:9200/api/twittervnext/tweet"
          

          【讨论】:

          • 如果其他提供的答案都不适用于 Windows,则使用启用了 Windows SSL 的 cURL curl.haxx.se/latest.cgi?curl=win64-ssl-sspi
          • 这是正确的,只是为了添加一点盐,如果你想在你引用的字符串中实际使用双引号,那么你需要对它们进行转义,例如:curl "http://localhost:3030/messages/" -H "Content-Type: application/json" --data-binary "{ \"name\":\"Curler\", \"text\": \"Hello from the command line\" }" 而不是curl "http://localhost:3030/messages/" -H "Content-Type: application/json" --data-binary '{ "name":"Curler", "text": "Hello from the command line" }'...注意错误部分的单引号和非转义双引号。
          • @EmmanuelMahuni 感谢您提供线索。我在尝试从 bitbucket 管道进行 CURL 时遇到了同样的问题,我的值包括双引号 (")(因为我正在使用 jq 从 aws cli 读取 json 响应),在从开始和结束删除双精度之后。它为我工作。我是这样做的。new_url=$( echo $url | tr -d \" )
          • 你为我节省了这么多时间!谢谢!
          • 与 macOS 上的 curl 效果相同。
          【解决方案8】:

          我把'http://webname...'改成"http://webname..."就解决了

          注意引号。它应该是双引号 (") 而不是单引号 (')。

          【讨论】:

          • 是的!这解决了我的问题,在我的 Windows 命令提示符下运行 curl。谢谢!
          【解决方案9】:

          我刚刚使用指向 openssl 1.0.2g 库文件夹和包含文件夹的配置选项重新编译 curl,但我仍然收到此消息。当我在 curl 上执行 ldd 时,它没有显示它使用 libcrypt.solibssl.so,所以我认为这一定意味着即使 makemake install 成功且没有错误,但是 curl 没有 HTTPS支持?配置和制作如下:

          ./configure --prefix=/local/scratch/PACKAGES/local --with-ssl=/local/scratch/PACKAGES/local/openssl/openssl-1.0.2g --includedir=/local/scratch/PACKAGES/local/include/openssl/openssl-1.0.2g
          make
          make test
          make install
          

          我应该提到libssl.so.1/local/scratch/PACKAGES/local/lib 中。目前还不清楚--with-ssl 选项应该指向那里还是指向openssl 安装程序放置openssl.cnf 文件的目录。我选择了后者。但如果它应该是前者,那么 make 应该会失败并出现找不到库的错误。

          【讨论】:

          • 链接文字本身是正确的。 curl 无法使用 https 检索,我也不知道为什么。
          【解决方案10】:

          在 https 网站上使用 curl 时遇到同样的错误

          curl https://api.dis...
          

          正如ganesh 所指出的,这是因为我的curl 版本没有启用ssl。回去用ssl下载了版本,效果很好。

          【讨论】:

          • 我也是,在下载页面上没有看到 SSL 选项。
          【解决方案11】:

          我在尝试为 ruby​​ 安装 rvm 时遇到了同样的问题。 找到了解决方案: 在root的downloads文件夹中解压curl(tar)后。

          cd /root/Downloads/curl # step-1
          ./configure --with-ssl # step-2
          make # step-3
          make install # step-4 (if not root, use sudo before command)
          

          source

          【讨论】:

            【解决方案12】:

            这在 libcurl 常见问题解答条目“Protocol xxx not supported or disabled in libcurl”中特别提到。

            为了您的高兴,我也在此处嵌入了解释:

            当将 URL 传递给 curl 使用时,它可能会响应 不支持或禁用特定协议。具体方式 这个错误信息的措辞是因为 curl 没有 内部区分特定协议是否不是 支持(即从未添加任何知道如何说话的代码 协议)或者如果它被明确禁用。 curl 只能构建为 支持一组给定的协议,其余的将被禁用 或不支持。

            请注意,如果您传递一个拼写错误,也会发生此错误 协议部分,如“htpt://example.com”或不太明显的部分 如果您在协议部分前面加上一个空格,如 " http://example.com/"。

            【讨论】:

            • 我不相信这个答案向 OP 解释了她/他需要做什么来解决问题。
            • 它解释了消息的含义,这意味着他的命令行不足以构建启用 HTTPS 的 libcurl
            • 得到了空格前缀。如果只有错误读取 'Protocol "xxx" not supported or disabled in libcurl'
            猜你喜欢
            • 2017-09-14
            • 2012-09-12
            • 2019-03-28
            • 2019-08-06
            • 2012-03-24
            • 2017-01-10
            • 2018-12-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多