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

设置Content-Type: application/json后cURL请求返回空数组的问题

哈哈,这个问题我碰到过好多次了,本质是PHP对不同请求内容类型的解析逻辑差异搞的鬼,我给你拆解清楚:

为什么带Content-Type: application/json会返回空数组?
  • PHP默认不自动解析JSON请求体
    PHP的$_POST超全局变量只对application/x-www-form-urlencoded(普通表单提交的默认类型)或multipart/form-data(带文件上传的表单类型)的请求体做自动解析。当你给请求加上Content-Type: application/json时,服务器不会把请求体解析到$_POST里——如果你的test.php代码是直接从$_POST拿数据,那自然拿到的就是空数组。

  • 后端代码没处理JSON请求体
    你的test.php大概率没写专门处理JSON格式请求的逻辑。要获取JSON请求体里的数据,得手动读取PHP的原始输入流:

    // 读取原始请求体
    $rawJson = file_get_contents('php://input');
    // 转成关联数组(第二个参数true是关键)
    $requestData = json_decode($rawJson, true);
    

    如果没做这一步,当请求头标记为JSON类型时,代码找不到可用的数据,就只能返回空数组了。而当你去掉Content-Type时,服务器会默认把请求体当作普通表单格式解析(前提是你的请求体本身是key=value这种表单结构),这时候$_POST就能拿到数据,所以返回正常。

关于你期望返回JSON格式数据的问题

这里要区分清楚:请求头的Content-Type是告诉服务器你发送的数据是什么格式,和服务器返回给你的数据格式完全是两回事。要让服务器返回JSON,你需要在test.php里主动设置响应头并输出JSON格式的内容:

// 设置响应头为JSON类型
header('Content-Type: application/json');
// 把数据转成JSON字符串输出
echo json_encode($yourDataArray);

这样不管你请求时用什么Content-Type,只要后端逻辑处理正确,都能拿到JSON格式的返回结果。

内容的提问来源于stack exchange,提问作者David C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:11:57