You need to enable JavaScript to run this app. 在PHP中如何提取返回JSON数组的URL数据?file_get_contents返回null
优惠活动
大模型
产品
解决方案
定价
更多

在PHP中如何提取返回JSON数组的URL数据?file_get_contents返回null

PHP获取指定接口JSON数据失败解决方案

故障原因

返回null问题通常是以下几个原因导致的:

  1. allow_url_fopen配置被禁用,导致file_get_contents无法请求外部URL
  2. 缺省的PHP请求头被接口拦截,该接口需要验证User-Agent等请求头才返回正常内容
  3. 接口返回的内容带UTF-8 BOM头、多余空格/换行等非JSON内容,导致json_decode解析失败
  4. 非标准端口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);
?>

残留问题排查

如果运行上述代码依然报错,按以下顺序排查:

  1. 打开原始响应打印的注释,若输出为空,确认你的服务器出站规则是否放开了8841端口的访问权限,也可尝试在服务器本地用curl命令直接请求该地址验证连通性
  2. 若输出为错误页/非JSON内容,说明该接口需要额外的鉴权参数,比如Cookie、请求头token等,需要补充对应参数到CURL配置中
  3. 若输出内容看起来是正常JSON但解码失败,手动删除JSON首尾的多余空格、换行等隐藏字符后再尝试解码

内容的提问来源于stack exchange,提问作者Omer Khalid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 11:15:03