【问题标题】:PHP cURL provides SSL-Error AFTER sending the data?PHP cURL 在发送数据后提供 SSL 错误?
【发布时间】:2014-04-23 10:33:51
【问题描述】:

这是我的代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postValues);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);

现在 $result 为“假”,curl_error() 显示 SSL 错误“无法识别对等证书颁发者。”。 但是虽然有这个错误,但是post数据已经发送到$apiUrl了。

这是正确的吗?错误或功能? ;)

如何改进这一点以防止将数据发送到不安全的服务?

提前致谢! :)

【问题讨论】:

    标签: php post curl ssl ssl-certificate


    【解决方案1】:

    有两种解决方案...

    解决方案 - 1

    如果您想跳过检查 SSL 证书使用......

    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    

    解决方案 - 2

    如果您有证书,请使用....

    curl_setopt ($ch, CURLOPT_CAINFO, "PATH_TO/cacert.pem");
    

    谢谢。

    【讨论】:

    • 感谢您的回答,但完全禁用验证是最糟糕的“解决方案”,更新 cacert.pem 也不是解决方案,因为我的问题是如何防止在此错误之前发送数据发生。我知道如何修复错误,但我想知道为什么发送了数据。
    • 从 php 5.5 开始,curl_setopt 中提供了新选项,即 CURLOPT_CONNECT_ONLY,它告诉库执行所有必需的代理身份验证和连接设置,但不传输数据。 CURLOPT_CONNECT_ONLY
    【解决方案2】:

    虽然出现了curl错误,但终于找到了数据传输的原因! 有一个重定向到另一个位置,并且“followlocation”处于活动状态,错误发生在重定向的站点上! 所以数据已经被发送到$apiUrl 并且已经被处理了。在此之后 curl 调用已被重定向并出现错误。

    我对逻辑的信任已经恢复:D

    【讨论】:

      【解决方案3】:

      这是不正确的;当 SSL 证书出现问题时,cURL 不会发送任何数据。

      (我刚刚测试了与本地脚本的连接 - 当第一个脚本在连接到它时遇到 SSL 错误时,第二个脚本没有运行。)

      【讨论】:

      • 这绝对是它曾经发生过的最奇怪的事情之一......同时我无法重现这个错误,如果 SSL 证书有问题,现在没有数据发送......但它发生了,相信我,这把我吓坏了>.
      猜你喜欢
      • 2018-07-12
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      相关资源
      最近更新 更多