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

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

如何解决这个问题?


当前回答

在libcurl常见问题解答条目“libcurl不支持或禁用协议xxx”中特别提到了这一点。

为了让你开心,我在这里也嵌入了解释:

When passing on a URL to curl to use, it may respond that the particular protocol is not supported or disabled. The particular way this error message is phrased is because curl doesn't make a distinction internally of whether a particular protocol is not supported (ie never got any code added that knows how to speak that protocol) or if it was explicitly disabled. curl can be built to only support a given set of protocols, and the rest would then be disabled or not supported. Note that this error will also occur if you pass a wrongly spelled protocol part as in "htpt://example.com" or as in the less evident case if you prefix the protocol part with a space as in " http://example.com/".

其他回答

我刚刚用指向openssl 1.0.2g库文件夹和包含文件夹的配置选项重新编译了curl,我仍然得到了这条消息。当我对curl执行ldd时,它没有显示它使用libcrypt。或者libssl。所以,所以我假设这一定意味着即使make和make安装成功没有错误,但curl不支持HTTPS ?配置和make如下:

./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应该会失败,并出现无法找到库的错误。

在libcurl常见问题解答条目“libcurl不支持或禁用协议xxx”中特别提到了这一点。

为了让你开心,我在这里也嵌入了解释:

When passing on a URL to curl to use, it may respond that the particular protocol is not supported or disabled. The particular way this error message is phrased is because curl doesn't make a distinction internally of whether a particular protocol is not supported (ie never got any code added that knows how to speak that protocol) or if it was explicitly disabled. curl can be built to only support a given set of protocols, and the rest would then be disabled or not supported. Note that this error will also occur if you pass a wrongly spelled protocol part as in "htpt://example.com" or as in the less evident case if you prefix the protocol part with a space as in " http://example.com/".

我的问题是由于没有显示UTF符号。我从浏览器中复制链接(在我的情况下,这是一个nginx轨道),并在剪贴板中得到以下内容:

$ 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|

问题出现在https之前的0xe2 0x80 0x8b序列中。这个序列是一个用UTF-8编码的零宽度JOINER。

在我的例子中,libcurl首先不支持HTTPS协议。为了找出哪些协议被支持,哪些协议不被支持,我使用命令检查了curl版本:

curl --version

它提供的资料如下: libcurl/7.50.3 SecureTransport zlib/1.2.5 . zip (x86_64-苹果-达尔文15.6.0 协议类型: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通信) 使 做测试 Sudo make install

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

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

libcurl/7.50.3 SecureTransport zlib/1.2.5 . zip (x86_64-苹果-达尔文15.6.0 协议类型: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

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

and

"

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

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