【发布时间】:2014-05-31 21:58:21
【问题描述】:
我在通过 PHP 中的 CURL 与某些第三方系统通信时遇到一些问题。
这是我必须提交的代码的一部分
$query = '<tag>some xml content with request data</tag>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://secure.certainsystem.com/function.php");
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
curl_setopt($ch, CURLOPT_POST, 1);
$data = curl_exec($ch);
所有情况下的请求都是相同的,但有时我没有从 curl_exec($ch) 获得任何数据,相反,当我运行 curl_error($ch) 时,我得到:
SSL 对等证书或 SSH 远程密钥不正确
这种情况并非一直都在发生,但它正在发生,所以我不确定问题可能出在代码中,还是我正在通信的第三方系统中存在问题到。
我在其他地方和这里也搜索过这个消息错误,发现如果CURLOPT_SSL_VERIFYPEER设置为true,那么可能是第三方系统的证书有问题,可能是自签名的一。但在我的情况下,该选项设置为0,我假设它被视为false。
最近我发现有一个选项CURLOPT_SSL_VERIFYHOST,但我没有将该选项设置为任何值,所以我认为它采用默认值,根据 PHP.net 文档,它是2,这意味着:
2 检查公用名是否存在,并验证它是否与提供的主机名匹配。
非常感谢您的帮助。
【问题讨论】:
-
您是否尝试过将 CURLOPT_SSL_VERIFYPEER 设置为 false 而不是 0?
-
我刚刚尝试将
CURLOPT_SSL_VERIFYPEER设置为false,目前看来还可以。由于这个错误几乎是随机发生的,我将不得不等待,看看它是否有效。