无法使用cURL或file_get_contents在PHP中工作

时间:2015-06-12 20:34:11

标签: php json curl https xampp

我无法为返回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用户的问题。

1 个答案:

答案 0 :(得分:0)

尝试添加此

  

curl_setopt($ CH,CURLOPT_SSL_VERIFYPEER,FALSE);

证书未成功验证。根据问题的严重程度,这可能无法纠正。

您不应该依赖此作为修复,但是它应该告诉您系统是否可以与他们进行通信。参考Frankzers发布的帖子。