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

PHP中使用CURL调用API返回No data sent错误如何解决

问题排查&修复方案

1. 先补充错误检测逻辑,定位具体故障点

你当前代码缺少请求错误、JSON编码错误的校验,无法区分是请求发送失败还是API侧参数解析失败,先替换为带错误检测的代码:

<?php
$url = 'endpoint'; 
$curl = curl_init();
$valu = array(
    'username' => 'used',
    'firstname' => 'user',
    'email' => 'user@email.com',
    'bio' => 'A very good personality',
    'lastname' => 'demo',
    'password' => 'date'
);

// 校验JSON编码是否出错
$postData = array("data" => $valu);
$json_string = json_encode($postData);
if (json_last_error() !== JSON_ERROR_NONE) {
    die("JSON编码失败:" . json_last_error_msg());
}

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_string);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true );
// 本地测试HTTPS接口可临时加下面两行跳过证书校验,生产环境请删除
// curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
// curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

$data = curl_exec($curl);

// 校验CURL请求本身是否出错
if(curl_errno($curl)){
    die("CURL请求错误:" . curl_error($curl));
}

// 打印响应状态码,判断是否为4xx/5xx类错误
$responseCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
echo "响应状态码:" . $responseCode . "<br>";

if($data){
    echo "响应内容:" . $data;
}
curl_close($curl);
?>

2. 核对API参数结构要求

你提到API要求字段放在data节点中,但给出的API示例结构没有外层data包裹,对应两种修复方式:

  • 如果API要求请求体直接是字段对象(不需要外层data包裹),调整JSON构造逻辑即可:
    // 去掉外层的data包裹
    $json_string = json_encode($valu);
    
  • 如果API要求表单格式提交,参数名为data、值为字段对象,删掉JSON格式的头配置,直接传表单数组:
    curl_setopt($curl, CURLOPT_POSTFIELDS, [
        'data' => json_encode($valu)
    ]);
    // 删掉原来的Content-Type:application/json配置,CURL会自动适配表单格式头
    

3. 其他常见踩坑点

  • 确认$url是真实接口地址,不是占位的endpoint
  • 确认接口是否需要额外请求头,比如鉴权token、Accept: application/json等

内容的提问来源于stack exchange,提问作者Samuel Titiloye-jnr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 03:36:06