我在通过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远程密钥不正常
这种情况并非一直发生,但它正在发生,所以我不确定问题是什么,如果问题出在代码中,或者第三方系统出现问题我&# 39; m comunicating to。
我在其他地方也在这里搜索了此消息错误,并且我发现如果CURLOPT_SSL_VERIFYPEER
设置为true
,那么它可能是第三方系统的问题&#39;证书,也许是自签名证书。但就我而言,该选项设置为0
,我认为该选项被视为false
。
最近我发现有一个选项CURLOPT_SSL_VERIFYHOST
,但我没有将该选项设置为任何值,所以我认为它采用默认值,根据PHP.net文档,它是{{ 1}},意思是:
2检查是否存在公用名,并验证它是否与提供的主机名匹配。
非常感谢你的帮助。
答案 0 :(得分:1)
添加选项
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
答案 1 :(得分:0)