本地环境PHP从URL获取黄金价格数据失败及需求咨询
解决PHP获取黄金价格的报错与克价获取问题
咱们一步步拆解问题,把它解决掉:
问题根源分析
你遇到的Trying to get property 'xxx' of non-object报错,核心原因是json_decode(curl_exec($curlSession))没有返回预期的对象。大概率是curl请求未成功获取有效JSON数据,导致$jsonData是null或者非对象类型,后续访问它的属性自然就报错了。
常见的触发原因包括:
- 本地环境的SSL证书验证失败(目标网站是HTTPS协议)
- curl请求本身出错(比如网络问题、URL拼写错误)
- 返回的内容不是标准的JSON格式
修复步骤与完整代码
下面是修复后的代码,包含错误处理、本地SSL适配,以及正确获取黄金克价的逻辑:
<?php $curlSession = curl_init(); // 设置目标请求URL curl_setopt($curlSession, CURLOPT_URL, 'https://data-asg.goldprice.org/dbXRates/USD'); // 本地环境临时禁用SSL证书验证(生产环境建议配置可信证书,不要用这两行) curl_setopt($curlSession, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curlSession, CURLOPT_SSL_VERIFYHOST, false); // 要求curl返回结果而非直接输出到页面 curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true); // 执行请求并捕获响应内容 $response = curl_exec($curlSession); // 检查curl请求是否失败 if ($response === false) { echo 'Curl请求出错: ' . curl_error($curlSession); curl_close($curlSession); exit; } // 解析JSON数据,第二个参数设为true转成关联数组(也可以保持对象模式,看个人习惯) $jsonData = json_decode($response, true); // 检查JSON解析是否成功 if ($jsonData === null) { echo 'JSON解析失败: ' . json_last_error_msg(); curl_close($curlSession); exit; } // 提取日期和黄金克价(接口返回的xauGramPrice就是美元计价的克价) $date = $jsonData['date']; $gold_gram_price = $jsonData['items'][0]['xauGramPrice']; echo "黄金价格(美元/克):{$gold_gram_price},日期:{$date}"; curl_close($curlSession); ?>
关键细节说明
- SSL验证适配:本地XAMPP环境默认缺少可信SSL证书,所以临时禁用验证(生产环境必须配置合法证书,不能用这两行)。
- 错误排查机制:新增了curl请求失败、JSON解析失败的检查,方便你快速定位问题。
- 克价字段匹配:目标接口返回的JSON里,
xauGramPrice就是你需要的黄金克价(美元/克),xauPrice是盎司价,直接取用即可。 - 数组/对象模式可选:代码里用关联数组访问数据,比对象模式更不容易出现属性访问报错;如果你习惯用对象,去掉
json_decode的第二个参数即可,但要确保$jsonData是有效对象。
内容的提问来源于stack exchange,提问作者Abilash Erikson
相关产品推荐
相关产品推荐

