我在尝试使用curl进行GET方法从远程web api获取xml时遇到了这种情况。
$url = 'xxxx.com'
$key = '/KEY/PRIVATE.KEY'
$perm = '/KEY/CERT.PEM'
$options = array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSLCERT => $perm ,
CURLOPT_SSLKEY => $key,
CURLOPT_HEADER => false,
);
$curl = curl_init();
curl_setopt_array($curl , $options);
$resp = curl_exec($curl);
curl_close($curl);
我必须链接SSL证书和pem,但$ resp总是返回false。
这是我的cURL请求应该在命令提示符下:
curl -k -v -X GET "[-URL-]" --cert ./KEY/CERT.pem --key ./KEY/PRIVATE.KEY
非常感谢任何帮助......
修改
所以,我使用了两种方法来尝试调试:
stderr
我有:
string ''.' unknown as intern or extern command, program file or executable file
' (length=117)
使用die(curl_error($curl))
我得到了这个:
unable to use client certificate (no key found or wrong pass phrase?)
所以,我实际上是用两个字符串($url = a . b
)制作我的网址,但是这应该有用,还是我疯了?
对于ssl错误,我不明白为什么我有这个问题,因为这在命令提示符下完全正常...
编辑2
所以,我发现如何解决部分问题:我必须使用realpath()
。
但现在我有了一个新问题:
SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
所以,我在stackoverflow上发现了一些更新cacert.pem文件的响应。
我做了,添加了CURLOPT_CAINFO => $cainfo,
在$options
中,将curl.cainfo = "PATH_TO/cacert.pem"
放入php.ini
(apache + php => WAMP)。 (PATH_TO
已被我的真实路径所取代。)
无论如何,在所有变化之后,我仍然有同样的问题。 我必须在php 5.3下工作,它会成为原因吗?
编辑3
最终找到了答案。我应该更仔细地寻找卷曲选项......
在命令提示符-k
中允许不安全的连接。
所以,在php中,我只需要将CURLOPT_VERIFYPEER
设置为false
。
仅供参考,我基于远程网络API给我的文档。
此致