libcurl不支持或禁用了https协议。

20
我在我的应用程序(它在OSCOMMERCE中)中使用Authorize.net,当用户进行付款时,返回空响应。我调试并发现它返回此错误:

协议https在libcurl中不受支持或禁用

我发送的是以https开头的正确url,其中没有空格: https://secure.authorize.net/gateway/transact.dll 我的应用程序在共享托管服务器上。 我怀疑这是服务器端问题还是编程问题?
3个回答

42

我曾经遇到过这个问题,原因是url中有空格:

' https://www.google.com/recaptcha/api/siteverify'

正如您所看到的,在 "https" 前有一个空格。


我刚遇到了类似的问题:我从 PowerPoint 幻灯片中复制了 URL,然后在 http:// 之前不知怎么就插入了 E2 80 8B Unicode 字符(是的,零宽空格)。尝试找出问题时非常困难,使用 HEX 编辑器打开 .bash_history 是至关重要的。确实涉及到了很多无语的操作。 - Jozef Chocholacek

29

对于那些拥有HTTPS支持但仍然遇到类似下面错误的人

[curl] 1: Protocol %20https not supported or disabled in libcurl [url] %20https://www.example.com/%20

确保URL地址有效

  • 尝试基础URL地址,例如https://www.example.com
  • 检查您的URL地址,并确保URL开头和结尾没有空格(如上面显示的%20)
  • 检查您的URL地址中是否有可能破坏curl请求的特殊字符

非常感谢您的贡献,有时作为开发人员,我们会忽略一些细节。在我的情况下,我的URL末尾有一个单引号,我没有注意到,这导致了错误的出现。最好的问候。 - Ivan Juarez
太糟糕了:一个网络编辑器在 https 前添加了一些不可见的空格!路径= https://jsonblob.com... - François Breton

8
创建一个名为info.php的脚本,在其中输入<?php phpinfo(); ?>。将其保存在您网站上的某个位置,以便可以通过浏览器访问。
查找curl部分,并检查支持哪些协议。 如果未列出https,则cURL未构建支持SSL的版本,因此您不能使用https。
您还可以在第一部分中查看Registered PHP Streams,并查看是否列出了https。 如果是,则可以回退使用PHP的套接字函数或使用具有上下文的函数,例如file_get_contents()fopen
由于您提到正在使用共享主机,请请求您的主机重新编译PHP,以使PHP和curl都构建为具有OpenSSL支持的版本,以便您可以使用加密,否则您需要找到其他解决方案。

1
简而言之,联系您的托管公司,如果他们不支持它,您将需要去支持该功能的其他公司。 - marko
10
谢谢 @drew010,但如果phpinfo()告诉我cURL支持HTTPS,但仍然报错,我该怎么办? - AlexGrafe
1
如果有人遇到了phpinfo()显示https已启用但仍然出现错误的问题,请留言让我知道。 - drew010
我正遇到这个问题:phpinfo() 显示 https 是一个注册流,curl 启用了 SSL,并且 https 是 curl 的协议... 然而仍然得到“https 在 libcurl 中不支持或被禁用”的错误。 - Robert Crooks

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