我在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标头,但没有任何区别。
答案 0 :(得分:1)
添加了答案以供参考:
在与OP合作后,他发现example.com
正在发出301重定向。
解决方案是通过添加以下选项使cURL跟随重定向:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
答案 1 :(得分:0)
也许您的服务器已禁用cURL,请尝试使用function_exists
:
var_dump(function_exists('curl_version'));