【问题标题】:cURL - Protocol https not supported or disabled in libcurl (post PHP update)cURL - libcurl 中不支持或禁用协议 https(PHP 更新后)
【发布时间】:2014-03-25 07:34:45
【问题描述】:

我知道关于这个特定主题有很多问题,但通常的建议似乎并没有帮助。我检查了 root 帐户下的服务器和我正在使用的特定帐户,在这两种情况下(如果它们甚至可以不同)SSL 被列为一项功能,HTTPS 被列为一项协议。

直到昨天我们将 PHP 从 ~5.1/5.2 升级到 5.4.26 之前,我的 cURL 函数都运行良好。我的假设是 PHP 和/或 cURL 是在没有 SSL 支持的情况下编译的,但事实并非如此。

如果有帮助,这些函数正在调用 Appcelerator 的云服务。这是登录函数之一,第一个抛出“trying to get property of non-object”错误,因为$res 为假:

function login() {
    $url = 'https://api.cloud.appcelerator.com/v1/users/login.json?key=<MY_APP_KEY>';
    $options = array(
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_POST => TRUE,
        CURLOPT_POSTFIELDS => array(
            'login' => '<MY_APP_LOGIN>',
            'password' => '<MY_APP_PASSWORD>'
        )
    );
    $curl_session = curl_init($url);
    curl_setopt_array($curl_session, $options);
    $res = curl_exec($curl_session);
    curl_close($curl_session);
    $this->session_id = json_decode($res)->meta->session_id;
}

是否有可能即使列出了 SSL 和 HTTPS,但它们实际上并未生效?有没有办法检查并在必要时修复它?

【问题讨论】:

  • 尝试将CURLOPT_SSL_VERIFYPEER / CURLOPT_SSL_VERIFYHOST 选项设置为false
  • 您说“SSL 被列为一项功能,而 HTTPS 被列为一项协议。”但您是如何做到的呢?对我来说,听起来您检查的内容与导致代码失败的原因不同。
  • @DanielStenberg SSH 到服务器根目录:-bash-3.2# curl-config --feature SSL IPv6 libz IDN NTLM -bash-3.2# curl-config --protocols HTTP HTTPS FTP FTPS FILE TELNET LDAP DICT TFTP

标签: php curl ssl https


【解决方案1】:

一个可能的问题是您的机器上安装了多个 libcurl 版本,因此当您的 PHP 环境运行不同版本时,以 root 身份进行检查会返回有关全局安装的信息。

在您的 PHP 程序中,您可以改为运行 curl_version() 并查看它对 SSL 支持和版本等的说明。

【讨论】:

  • 嗯,这很奇怪。即使我检查了这个特定帐户的 curl 配置,运行 curl_version() 显示 ssl_version 为 NULL,ssl_version_number 为 0,并且协议数组中自然缺少 https。那么我将如何启用 SSL 呢?我必须完全重新配置 Apache 吗?
  • 不,您的 PHP 使用的 libcurl 版本需要构建 SSL 支持。您可能应该尝试确保使用单一且唯一的 libcurl 安装并使用 SSL...
  • 是的,看来我们必须重建 Apache。谢谢。
猜你喜欢
  • 2017-09-14
  • 2011-10-16
  • 2019-08-06
  • 2012-03-24
  • 2017-01-10
  • 2012-09-12
  • 2020-01-22
  • 2017-09-08
  • 2020-04-09
相关资源
最近更新 更多