我无法为返回JSON的https页面获取cURL请求或file_get_contents()。请注意,我已经查看了多个类似问题的StackOverflow主题,但似乎都没有解决我的具体问题。
背景:我正在使用运行OS X 10.10.3(Yosemite)的MAC。我刚刚安装了XAMPP 5.6.8,以便我可以运行本地Web服务器以便使用php等。
目标:我想简单地显示https GET请求返回的JSON对象的内容。对于上下文,页面为https://api.discogs.com/releases/249504。
行动:我在其他帖子上读到,为了检索HTTPS页面,我必须在我的php.ini文件中进行以下开箱即用的更改,我已经完成了: - 取消注释/启用allow_url_fopen = On - 取消注释/启用allow_url_include = on - 取消注释extension = php_openssl.dll
结果: 使用file_get_contents()...
代码:
<?php
$url = "https://api.discogs.com/releases/249504";
$text = file_get_contents($url);
var_dump($text);
?>
结果:
Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in /Applications/XAMPP/xamppfiles/htdocs/phpWorkspace/firstPhp/firstPhp.php on line 5
Warning: file_get_contents(): Failed to enable crypto in /Applications/XAMPP/xamppfiles/htdocs/phpWorkspace/firstPhp/firstPhp.php on line 5
Warning: file_get_contents(https://api.discogs.com/releases/249504): failed to open stream: operation failed in /Applications/XAMPP/xamppfiles/htdocs/phpWorkspace/firstPhp/firstPhp.php on line 5
布尔(假)
使用cURL ...
代码: https://api.discogs.com/releases/249504" ;
// Initiate curl
$ch = curl_init();
// Will return the response, if false it print the response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Set the url
curl_setopt($ch, CURLOPT_URL,$url);
// Execute
$result=curl_exec($ch);
// Closing
curl_close($ch);
var_dump($result);
?>
结果: 布尔(假)
任何建议都会非常有帮助。我已经玩过基于其他SO帖子的不同cURL调用,每个调用都返回NULL,与证书/身份验证相关的错误,或者像上面那样。
UPDATE!
我将CURLOPT_SSL_VERIFYPEER添加到我的cURL代码并将其设置为off以验证我至少可以与服务器通信 - 这有助于我确定我需要提供用户代理。但是,当我删除SSL_VERIFYPEER时,我仍然有证书问题。
作为最后的努力,我卸载了XAMPP,并在Mac OS中打开了php / apache。配置完成后,开箱即用的cURL和FILE_GET_CONTENTS()调用都使用与上面相同的代码与用户代理一起工作[令人沮丧!]。
我的直觉告诉我,我在XAMPP中的配置与我的证书有关。有趣的是,虽然我没有看到很多在线,因为这是其他XAMPP用户的问题。
答案 0 :(得分:0)
尝试添加此
curl_setopt($ CH,CURLOPT_SSL_VERIFYPEER,FALSE);
证书未成功验证。根据问题的严重程度,这可能无法纠正。
您不应该依赖此作为修复,但是它应该告诉您系统是否可以与他们进行通信。参考Frankzers发布的帖子。