所以我有这段代码:
$url = "https://..."; //a valid url, showing without errors a correct XML
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_TIMEOUT, 60);
/* to which i added the following */
curl_setopt($handle, CURLOPT_CAPATH, "http://curl.haxx.se/ca/cacert.pem");
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, TRUE);
$result = curl_exec($handle);
$resultXml = new SimpleXMLElement($result); //Line 47
/* tests */
var_dump($handle); echo "<br/><br/>"; //resource(11) of type (curl)
var_dump($url); echo "<br/><br/>"; //string(149) "https://..." (exactly $url)
var_dump($result); echo "<br/><br/>"; //bool(false)
这会产生此错误:
Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' [...] on line 47
Stack trace:
#0 C:\yy.php(47): SimpleXMLElement->__construct('')
#1 C:\xx.php(23): Integrator->Integrator('numbers', Object(Database))
#2 {main}
thrown [...] on line 47
var_dump()返回的是注释。
使用它,我们可以看到$ result为空;这是主要问题!
我首先想到的问题是从https连接到页面,所以我在中间添加了3行;问题依然存在。
现在我想知道我的SSL证书(来自Gandi SAS)是否明确包含在http://curl.haxx.se/ca/cacert.pem中的事实是问题所在。 如果是这样,我如何告诉CURLOPT_CAPATH获取我的证书?
其他地方有错误吗?
感谢您的帮助!
答案 0 :(得分:0)
使用CURLOPT_CAINFO指定证书文件。
CURLOPT_CAINFO - The name of a file holding one or more certificates to
verify the peer with. This only makes sense when used in combination with
CURLOPT_SSL_VERIFYPEER.
这需要是文件的绝对路径。
修复ssl问题后,您应该在卷曲响应中获取数据。