You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP调用API打印JSON响应时出现Cannot read properties of undefined错误

PHP cURL调用JSON API返回TypeError,但浏览器/JS Fetch正常

可能的原因及解决方案

1. URL参数未正确编码

你的URL中包含teams=[ZZ],方括号[]属于URL特殊字符,需要进行URL编码才能被服务器正确解析。浏览器和JS的fetch会自动处理这类编码,但PHP cURL直接使用未编码的URL时,可能导致服务器参数解析错误,进而触发代码中的includes调用失败(因为参数未正确识别,对应变量为undefined)。

解决办法:使用http_build_query()自动构建编码后的URL参数:

// 构建参数数组
$params = [
    'id' => 'XX',
    'division' => 'YY',
    'teams' => '[ZZ]'
];
// 自动编码参数并拼接URL
$url = 'https://json-api-url-domain.com/matches?' . http_build_query($params);

2. 请求头与浏览器差异

浏览器和fetch会自动携带一些默认请求头(比如User-Agent),而PHP cURL的默认请求头可能被API服务器识别为非浏览器请求,触发不同的处理逻辑。

解决办法:添加模拟浏览器的User-Agent头:

curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Accept: application/json',
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
));

3. 排查cURL底层错误

添加cURL错误检查,确认是否存在连接、SSL层面的问题:

$result = curl_exec($cURL);
// 检查cURL执行是否出错
if(curl_errno($cURL)){
    die('Curl执行错误: ' . curl_error($cURL));
}
curl_close($cURL);

修改后的完整代码

$params = [
    'id' => 'XX',
    'division' => 'YY',
    'teams' => '[ZZ]'
];
$url = 'https://json-api-url-domain.com/matches?' . http_build_query($params);

$cURL = curl_init();

curl_setopt($cURL, CURLOPT_URL, $url);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Accept: application/json',
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
));

$result = curl_exec($cURL);
if(curl_errno($cURL)){
    die('Curl执行错误: ' . curl_error($cURL));
}
curl_close($cURL);

$json = json_decode($result, true);
var_dump($json);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:33:11