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

POST请求JSON体接收异常求助:PHP无法获取Postman请求体数据

解决PHP无法接收POST请求JSON体的问题

核心问题分析

你遇到的情况是:POST请求能正常拿到请求头,但$_POST、filter_input_array(INPUT_POST)为空,file_get_contents('php://input')解析JSON后返回NULL。本质原因是JSON格式的请求体不会被PHP自动解析到$_POST,且请求配置或代码可能存在错误。

分步排查与解决

  • 第一步:确认Postman请求配置正确性
    从你提供的截图出发,必须确保:

    1. 请求体选择raw -> JSON格式,而非form-data或x-www-form-urlencoded
    2. 请求头包含Content-Type: application/json(选JSON格式后Postman会自动添加,建议手动检查确认)
    3. 输入的JSON内容格式合法,避免多余逗号、引号不配对等低级错误
  • 第二步:调试原始请求体内容
    先单独输出原始请求体,确认数据是否真的传到服务器:

    $payload = file_get_contents('php://input');
    var_dump('原始请求体内容:', $payload);
    

    如果输出为空,说明请求体未被正确发送或服务器配置拦截了读取:

    • 检查php.ini中enable_post_data_reading是否为On
    • Nginx用户检查client_max_body_size设置是否足够,避免请求体被截断
  • 第三步:排查JSON解析错误
    如果$payload有内容但json_decode返回NULL,用json_last_error_msg()查看具体错误原因:

    $data = json_decode($payload, true);
    if ($data === null) {
        var_dump('JSON解析失败原因:', json_last_error_msg());
    }
    

    常见错误包括JSON格式不合法、编码不匹配等,根据提示修正即可。

  • 第四步:修正代码误区
    注意:$_POST和filter_input_array(INPUT_POST)仅能解析application/x-www-form-urlencoded或multipart/form-data类型的请求体,JSON格式请求不会被填充到这些变量中,所以它们为空是正常现象,不要依赖这两个变量获取JSON数据。

测试用完整代码

// 获取原生请求头(替换你自定义的getRequestHeaders())
$receivedHeaders = getallheaders();
var_dump('请求头:', $receivedHeaders);

// 读取原始请求体
$payload = file_get_contents('php://input');
var_dump('原始请求体:', $payload);

// 解析并验证JSON
$data = json_decode($payload, true);
if ($data === null) {
    var_dump('JSON解析错误:', json_last_error_msg());
} else {
    var_dump('解析后的数据:', $data);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:06:24