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

PHP无需路由接收POST请求体?Postman发JSON返回空$_POST数组

解决PHP无法读取Postman发送的JSON POST请求问题

嘿,作为曾经踩过这个坑的PHP新手,我太懂你的困惑了!你遇到的问题其实是PHP默认的请求解析规则导致的——$_POST数组只负责解析application/x-www-form-urlencoded或者multipart/form-data格式的请求体,而你用Postman发送的是JSON格式的请求,PHP不会自动把它塞进$_POST里,所以才会输出空数组。

解决方案:手动读取并解析JSON请求体

你需要直接读取原始的请求内容,再把它解码成PHP能识别的数组。下面是修改后的完整脚本:

<?php
// 读取原始的JSON请求内容(php://input是PHP的输入流)
$rawJson = file_get_contents('php://input');

// 把JSON字符串解码成关联数组(第二个参数true确保返回数组而非对象)
$postData = json_decode($rawJson, true);

if (!empty($postData)) {
    echo "解析后的JSON数据:<br>";
    print_r($postData);
    echo "<br>";
    var_dump($postData);
} else {
    echo "未接收到有效的JSON数据,或者请求体为空。<br>";
    // 可以输出原始内容排查问题
    echo "原始请求内容:" . $rawJson;
}
?>

别忘了检查Postman的设置!

确保你在Postman里做了这两个关键设置:

  • 请求头添加Content-Type:在Headers标签里,添加键为Content-Type,值为application/json的头部(这一步非常重要,告诉PHP你发送的是JSON数据)
  • Body格式选Raw+JSON:在Body标签里,选择raw,然后右侧下拉框选JSON,再输入你的JSON内容{"Test": "testValue"}

进阶:兼容多种请求格式

如果之后你的脚本需要同时处理表单提交和JSON请求,可以通过判断请求头的Content-Type来自动适配:

<?php
$contentType = $_SERVER['CONTENT_TYPE'] ?? '';
$postData = [];

if (strpos($contentType, 'application/json') !== false) {
    // 处理JSON请求
    $rawJson = file_get_contents('php://input');
    $postData = json_decode($rawJson, true) ?: [];
} else {
    // 处理普通表单请求
    $postData = $_POST;
}

print_r($postData);
?>

这样不管是表单提交还是JSON请求,脚本都能正确获取到数据啦!

内容的提问来源于stack exchange,提问作者anonymous-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:25:19