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

PHP使用cURL请求Web API返回bool,如何正确获取返回的JSON数据?

问题原因

  • 核心问题是curl配置项CURLOPT_RETURNTRANSFER被设置为false:当该参数为false时,curl_exec()执行成功后会直接把响应内容输出到标准输出,自身仅返回布尔值true表示请求执行成功,仅请求失败时返回false。你看到的输出里先出现JSON字符串、后出现bool(true)就是这个原因:JSON是curl直接输出的,bool(true)才是$data变量的实际值。
  • 额外不规范点:你用GET请求的同时设置了CURLOPT_POSTFIELDS传递请求体,HTTP规范中GET请求通常不携带请求体,部分服务端会直接忽略GET请求的请求体内容,就算本次请求拿到了返回,后续也可能出现参数接收异常的问题。

解决方法

  1. 把CURLOPT_RETURNTRANSFER的配置值改为true,让curl_exec()把响应内容作为返回值赋值给$data变量,而不是直接输出。
  2. 可选优化:如果接口要求用GET请求,就把参数拼到请求URL上;如果接口支持POST,就把CURLOPT_CUSTOMREQUEST改成"POST",符合HTTP规范。
  3. 增加必要的错误判断,避免后续json_decode或者遍历字段时报错。

修正后参考代码

//data
$data = array("Id_Empresa" => 1);
$url = '你的接口地址';

try {
    $ch = curl_init($url);
    $data_string = json_encode($data);

    if (FALSE === $ch)
        throw new Exception('failed to initialize');

    // 这里如果接口支持POST就用POST,避免GET带请求体的问题
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    // 核心修改:把RETURNTRANSFER设为true
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)));
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    $data = curl_exec($ch);
    
    // 新增curl请求错误判断
    if($data === false) {
        throw new Exception(curl_error($ch), curl_errno($ch));
    }
    curl_close($ch);
    
    $json = json_decode($data);
    // 新增json解析判断,避免返回格式异常时报错
    if (json_last_error() !== JSON_ERROR_NONE) {
        throw new Exception('响应内容不是合法JSON:' . json_last_error_msg());
    }
    
    foreach ($json->msg as $item) {
          echo "$item->Nombre, $item->Descripcion" . PHP_EOL;
    }
    // ...process $output now
} catch(Exception $e) {
    trigger_error(sprintf(
        '请求失败错误 #%d: %s',
        $e->getCode(), $e->getMessage()),
        E_USER_ERROR);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:54:03