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

使用curl/Postman向PHP接口POST JSON,var_dump返回NULL问题排查

解决PHP中file_get_contents('php://input')返回NULL的问题

从你的描述来看,核心矛盾是终端curl请求能正常返回解析后的数组,但网页端直接访问却返回NULL,我来帮你拆解问题并给出解决方案:

先明确核心问题:请求方法不匹配

你在终端用的是POST请求,但网页端直接访问index.php时,浏览器默认发送的是GET请求。而php://input只在POST(且非multipart/form-data格式)请求中才会包含提交的原始数据,GET请求下它是空字符串,json_decode处理空字符串自然返回NULL。

再排查其他可能的异常场景

如果是用Postman测试也返回NULL,那大概率是请求格式不对:

  • 你可能没在Postman里正确设置Content-Type: application/json请求头;
  • 或者在Postman的Body选项卡选了form-data/x-www-form-urlencoded格式,而非raw JSON——这种情况下PHP会把数据放到$_POST数组里,php://input依然是空的。

针对性解决方案

1. 让代码兼容GET/POST请求(适配网页访问场景)

如果你需要网页直接访问也能看到数据(比如调试用),可以修改代码区分请求方法:

<?php 
header('Access-Control-Allow-Origin: *'); 
header('Content-Type: application/json;charset=utf-8;'); 

$data = null;
// 处理POST请求的JSON数据
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $json = file_get_contents('php://input');
    $data = json_decode($json, true);
} 
// 处理GET请求的参数(可选,用于调试)
elseif ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $data = $_GET;
}

die(var_dump($data)); 
?>

2. Postman测试的正确姿势

确保你按以下步骤操作:

  • 选择POST请求,填写正确的URL;
  • 切换到Body选项卡,选择raw,格式下拉选JSON;
  • 粘贴你的JSON数据:
    { "id": "urn:ngsi-ld:Building:store005", "type": "Building" }
    
  • 检查Headers里是否存在Content-Type: application/json(选raw JSON时Postman会自动添加,最好确认下)。

3. 修正curl命令的转义问题

你原curl命令里的&quot;是不必要的,直接用双引号即可(bash终端下注意转义,或者用单引号包裹JSON):

# 正确的curl命令
curl -iX POST http://localhost/rest_api/index.php -H 'Content-Type: application/json' -d '{ "id": "urn:ngsi-ld:Building:store005", "type": "Building" }'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:32:46