curl:(1)libcurl不支持或禁用协议https


162

我正在尝试在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 ...是一种解决方法
Giuseppe Di Federico

1
我很难相信您的curl不支持HTTPS。rvm可能带有它自己的curl,或者您没有安装curl(sudo apt-get install curl)。尝试curl -o "google.html" https://google.com检查是否支持HTTPS。
奥姆里·巴雷尔

我收到与相同的错误消息RCurl
同构

惊讶的是,这个答案还没有被接受。
jbrahy

Answers:


295

这里找到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,请使用启用Windows SSL的cURL curl.haxx.se/latest.cgi?curl=win64-ssl-sspi
ganesh 2015年

6
这是正确的,只是加了一点盐,如果您想在引用的字符串中实际使用双引号,则需要转义它们,例如: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 \" )
阿普·米斯特里

1
您刚刚节省了我很多时间!谢谢!
理查德·瓦诺

1
对macOS的curl具有相同的效果。
not2savvy

82

我遇到了这个问题,结果是在https导致问题的空格之前。" https://""https://"


6
和我一样。我感到惊讶的是,为什么我在地球上遇到这个错误。:) +1分享。
阿怀斯·卡尼

3
对我来说类似,这是单引号,因为虽然没有必要,但我们用默认的bash值包装了单引号...
Mathieu Dumoulin

1
令人惊讶的是,这显然对很多人(包括我自己)来说都是一个问题。这件事不时发生,但似乎有些晦涩。呃,好吧。谢谢
dgo

1
这就是我的问题。感谢@jbrahy
colecmc

1
是的,我也一样。通过删除空间,它对我来说效果很好。
Amandeep kaur

21

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

"

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

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

当然可以,我的男人。
Pavan_Obj”,

这个解决了我的问题。
哈里·恩内卡

很高兴它固定:)。
Pavan_Obj

11

尝试为Ruby安装rvm时遇到了相同的问题。找到了解决方法:在根目录的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)

资源



8

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

为了您的方便,我也在此处嵌入了说明:

当传递URL卷曲以使用时,它可能会响应不支持或禁用特定协议。错误消息的特定表达方式是因为curl内部没有区分不支持特定协议(即,未添加任何知道如何使用该协议的代码)还是已被明确禁用。可以将curl构建为仅支持给定的一组协议,然后其余的将被禁用或不被支持。

请注意,如果您在“ htpt://example.com”中传递了拼写错误的协议部分,或者在协议部分中以“ http:// example。 .com / ”。


10
我认为此答案无法向OP解释他/他需要采取什么措施来解决此问题。
同构

3
它解释了消息的含义,这意味着他的命令行不足以在启用HTTPS的情况下构建libcurl
Daniel Stenberg

有一点空格前缀。如果仅仅是错误读“议定书‘XXX’不支持或libcurl中禁用”
托弗

8

在我的情况下,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大文件NTLM 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 协议: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协议出现了!

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



2

未显示UTF符号引起了我的问题。我从nginx轨道复制链接,并在剪贴板中得到了下一个:

0x00000000: e2 80 8b 68 74 74 70 73 3a 2f 2f 73 6b 2e 65 65 2f 75 70 6c 6f 61 64 2f 66 69 6c 65 73 2f 45 53  ...https://sk.ee/upload/files/ES
0x00000020: 54 45 49 44 2d 53 4b 5f 32 30 31 35 2e 70 65 6d 2e 63 72 74                                      TEID-SK_2015.pem.crt            

问题符号是0xe2 0x80 0x8b ZERO WIDTH JOINER,它位于https之前。


1

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

curl https://api.dis...

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


1
我也是,在下载页面上没有看到SSL选项。
Patrick Borkowicz 2015年

0

我只是重新编译了带有指向openssl 1.0.2g库文件夹和include文件夹的configure选项的curl,但仍然收到此消息。当我对curl进行ldd时,它并不表示它使用libcrypt.solibssl.so,因此我认为这必须表示即使成功了make并且make 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文件所在的目录。我选择了后者。但是,如果应该是前者,制造商应该会因找不到库而出错。


链接文本本身是正确的。curl无法使用https进行检索,我也不知道为什么。
tedtoal

0

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

我有一个类似的问题(使用curl php客户端时):

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.