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

如何将Curl返回结果中的单个值存入PHP变量?

问题解决:从Curl返回的JSON中提取access_token

你的代码存在几个关键问题,导致无法成功提取access_token,下面是问题分析和修正方案:

问题点分析

  1. 重复发起Curl请求:你先后执行了$body = curl_exec($ch);和$result = curl_exec($ch);,这会触发两次API请求,不仅浪费资源,还可能导致第二次请求返回异常结果。
  2. 未解析JSON字符串:Curl返回的是JSON格式的字符串,并非PHP数组或对象,所以is_array($result) || is_object($result)的判断永远不成立,foreach循环根本不会执行。
  3. HTTP头设置顺序错误:你在第一次Curl执行后才设置CURLOPT_HTTPHEADER,导致第一次请求没有携带正确的请求头,完全不符合逻辑。

修正后的代码

<?php
$ch = curl_init();

// 一次性设置所有Curl选项
curl_setopt($ch, CURLOPT_URL, 'https://api.dropbox.com/oauth2/token');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "refresh_token=<REFRESH HERE>&grant_type=refresh_token&client_id=<KEY HERE>&client_secret=<SECRET HERE>");

// 提前设置请求头,确保在请求发起前生效
$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

// 仅执行一次Curl请求
$result = curl_exec($ch);

if (curl_errno($ch)) {
    echo '错误:' . curl_error($ch);
} else {
    // 将JSON字符串解析为关联数组(第二个参数为true)
    $decodedData = json_decode($result, true);
    
    // 校验解析结果并提取目标字段
    if (is_array($decodedData) && isset($decodedData['access_token'])) {
        echo '提取到的access_token:' . $decodedData['access_token'];
    } else {
        echo 'JSON解析失败或返回数据中不存在access_token';
        // 如需排查问题,可临时打印原始返回结果
        // echo '原始返回数据:' . $result;
    }
}

curl_close($ch);
?>

关键说明

  • 用json_decode($result, true)将JSON字符串转为关联数组,第二个参数设为true可以确保返回数组而非对象,直接通过键名即可访问目标值。
  • 不需要foreach循环,因为API返回的是单个JSON对象,而非数组列表,直接通过$decodedData['access_token']就能拿到结果。
  • 增加isset($decodedData['access_token'])判断,避免API返回异常数据时出现报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:26:08