curl: (1) libcurl不支持或禁用了HTTPS协议。

259

我正在尝试在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),会发生什么? - Omri Barel
同样的问题,我认为--with...是一个解决方法。 - Giuseppe Di Federico
1
我很难相信你的curl不支持HTTPS。可能是因为rvm自带了它自己的curl,或者你没有安装curl(sudo apt-get install curl)。尝试curl -o "google.html" https://google.com来检查是否支持HTTPS。 - Omri Barel
我在使用RCurl时遇到了相同的错误信息。 - isomorphismes
很惊讶这个问题还没有被接受的答案。 - jbrahy
13个回答

515

在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"

2
如果其他提供的答案在Windows上无法使用,请使用启用SSL的Windows cURL http://curl.haxx.se/latest.cgi?curl=win64-ssl-sspi。 - ganesh
12
这是正确的,只需加一点咸味。如果你想要在引用的字符串中实际使用双引号,那么你需要转义它们,例如: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" }'...请注意错误部分的单引号和未转义的双引号。 - Emmanuel Mahuni
2
你刚刚为我节省了太多时间!谢谢! - Richard Varno
1
在 macOS 上具有与 curl 相同的效果。 - not2savvy
1
已经为我解决了问题。谢谢。 - Ola
显示剩余5条评论

114

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


7
我也遇到了相同的问题。我很惊讶为什么会出现这个错误。 :) 谢谢分享。 - Awais Qarni
3
对我来说也一样,这是一个单引号,因为我们用单引号包裹了默认的bash值,尽管这并不必要... - Mathieu Dumoulin
1
真是令人惊讶,这显然是很多人(包括我自己)遇到的问题。这种情况偶尔会发生,但似乎有点难以理解。嗯,谢谢。 - dgo
1
那对我来说就是问题所在。谢谢@jbrahy - colecmc
1
是的,我也遇到了同样的问题。去掉空格后,它对我很有效。 - Amandeep kaur
1
感谢您的信息。由于“https://”会导致错误,请使用trim()函数来避免此类错误。 - Ashish Sharma

53

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


并且
"

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

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

当然没问题,伙计。 - Pavan_Obj
这个解决了我的问题。 - Hari Ennekat
很高兴它已经修复了 :)。 - Pavan_Obj
这个问题对我也有帮助。之前在使用HTTPS的curl请求中没有遇到过这个错误,所以一直在想。 - Anupam
好的,知道了 Anupam。 - Pavan_Obj

15

我在尝试为Ruby安装rvm时遇到了同样的问题。 找到了解决方案: 在root用户的下载文件夹中解压缩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


13

在我的情况下,libcurl一开始不支持HTTPS协议。为了找出哪些协议得到支持,哪些没有,我使用以下命令检查了curl版本:

In my case, libcurl did not support HTTPS protocol initially. To determine the supported and unsupported protocols, I used the following command to check the curl version:

curl --version

以下是提供的信息:

curl 7.50.3 (x86_64-apple-darwin15.6.0) libcurl/7.50.3 SecureTransport zlib/1.2.5

协议:字典文件FTP FTPS gopher http IMAP imaps LDAP LDAPS pop3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP 功能:IPv6大文件NTLM NTLM_WB SSL libz UnixSockets

注意,https协议不支持。

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

 

./configure --with-darwinssl(在Mac上启用SSL通信)   make   make test   sudo make install

经过几分钟的工作后,问题得到解决!

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

curl 7.50.3 (x86_64-apple-darwin15.6.0) libcurl/7.50.3 SecureTransport zlib/1.2.5 协议:字典文件FTP FTPS gopher http https IMAP imaps LDAP LDAPS pop3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP 功能:IPv6大文件NTLM NTLM_WB SSL libz UnixSockets

HTTPS协议出现了!

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


12

我只需要将'http://webname...'改为 "http://webname..." 就可以解决问题。

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


是的!这对我解决了问题,在我的Windows命令提示符中运行curl。谢谢! - Ryano

10

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

进入带有 curl 源代码的文件夹。

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

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

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


7

这个问题在libcurl FAQ条目 "协议 xxx 在libcurl中不被支持或禁用" 中有明确提到。

为了方便起见,我在这里嵌入了解释:

当向curl传递要使用的URL时,它可能会回复该特定协议不受支持或已禁用。这个错误消息的具体措辞是因为curl在内部没有区分特定协议是否不受支持(即从未添加任何知道如何讲述该协议的代码)还是是否明确禁用。curl可以构建为仅支持给定的一组协议,其余协议将被禁用或不受支持。

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


23
我认为这个答案没有向提问者解释他/她需要做什么来解决问题。 - isomorphismes
3
它解释了消息的含义,这意味着他的命令行没有足够的能力来构建启用HTTPS的libcurl。 - Daniel Stenberg
被空格前缀咬了一口。如果错误信息只是“协议“xxx”在libcurl中不受支持或已禁用”,那该多好啊。 - topher

4

我的问题是由于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|

问题出在序列0xe2 0x80 0x8b之前的地方,紧接着是https。这个序列是一个UTF-8编码的零宽连接器

1

当使用curl访问https网站时,我遇到了同样的错误

curl https://api.dis...

正如ganesh所指出的那样,这是因为我的curl版本没有启用ssl。回去下载带有ssl的版本,就可以正常工作了。

2
我也是,没有在下载页面上看到SSL选项。 - Patrick Borkowicz
如何在CentOS 7上安装SSL版本? - Awan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接