在PHP中如何提取返回JSON数组的URL数据?file_get_contents返回null
PHP获取指定接口JSON数据失败解决方案
故障原因
返回null问题通常是以下几个原因导致的:
allow_url_fopen配置被禁用,导致file_get_contents无法请求外部URL- 缺省的PHP请求头被接口拦截,该接口需要验证User-Agent等请求头才返回正常内容
- 接口返回的内容带UTF-8 BOM头、多余空格/换行等非JSON内容,导致
json_decode解析失败 - 非标准端口8841被服务器防火墙拦截,请求无法正常发出
可直接使用的CURL实现代码
<?php error_reporting(E_ALL); $ch = curl_init("http://bisscloud.britain.edu.pk:8841/BISSJSon/JSonStudentsAll.aspx"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", CURLOPT_FOLLOWLOCATION => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false ]); $rawResponse = curl_exec($ch); if(curl_errno($ch)){ die("Curl请求错误: " . curl_error($ch)); } curl_close($ch); // 调试时可取消下一行注释,查看原始返回内容 // var_dump($rawResponse); // 去除UTF-8 BOM头 $rawResponse = preg_replace('/^\x{EF}\x{BB}\x{BF}/u', '', $rawResponse); $data = json_decode($rawResponse, true); if(json_last_error() !== JSON_ERROR_NONE){ die("JSON解码错误: " . json_last_error_msg()); } var_dump($data); ?>
残留问题排查
如果运行上述代码依然报错,按以下顺序排查:
- 打开原始响应打印的注释,若输出为空,确认你的服务器出站规则是否放开了8841端口的访问权限,也可尝试在服务器本地用curl命令直接请求该地址验证连通性
- 若输出为错误页/非JSON内容,说明该接口需要额外的鉴权参数,比如Cookie、请求头token等,需要补充对应参数到CURL配置中
- 若输出内容看起来是正常JSON但解码失败,手动删除JSON首尾的多余空格、换行等隐藏字符后再尝试解码
内容的提问来源于stack exchange,提问作者Omer Khalid
相关产品推荐
相关产品推荐

