页面可由file_get_contents读取,但不能读取cURL

时间:2017-07-04 03:27:09

标签: php json api

我在PHP中创建一个API端点,并且有一个输出JSON的页面,让我们称之为example.com/stats。当用户尝试返回数据时,只有在用户使用file_get_contents()时才会成功,当用户尝试使用cURL到达时,他们会收到NULL响应。我应该如何在PHP中提供JSON数据,以便它与file_get_contents和curl兼容?

以下更多信息。

/ stats的消息来源

header('Content-type: application/json');
echo '{"status":"error", "message":"invalid operation"}';

当我尝试通过file_get_contents()从其他服务器读取此页面时,一切正常。

function fgc($receive_url){
$fgc = json_decode(file_get_contents($receive_url), true);
return $fgc;
}

$out = fgc("https://example.com/stats");
var_dump($out);

//returns: array(2) { ["status"]=> string(5) "error" ["message"]=> string(17) "invalid operation" }

当我尝试使用cURL做同样的事情时,我得到NULL

function curlit($receive_url){
$ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
    curl_setopt($ch, CURLOPT_URL, $receive_url);
$ccc = curl_exec($ch);
$json = json_decode($ccc, true);
return $json;
}

$out = curlit("https://example.com/stats");
var_dump($out);     

请注意,显示JSON的其他网站可以正常使用我的cURL功能,它特别是我在使用cURL时失败的example.com/stats服务的数据。我认为使用头文件application / json就足以允许通过cURL访问这些数据了。任何想法在服务方面可能出错?为什么文件获取内容有效但不卷曲?也许cURL在页面加载之前显示结果?我尝试删除应用程序/ json标头,但没有任何区别。

2 个答案:

答案 0 :(得分:1)

添加了答案以供参考:

在与OP合作后,他发现example.com正在发出301重定向。

解决方案是通过添加以下选项使cURL跟随重定向:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

答案 1 :(得分:0)

也许您的服务器已禁用cURL,请尝试使用function_exists

进行检查
var_dump(function_exists('curl_version'));