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

Flutter通过HTTP POST请求PHP接口时php://input无法获取传参

问题原因及解决方案

1. 跨域预检请求拦截导致请求体丢失

你当前PHP侧配置的Access-Control-Allow-Headers响应头未允许Content-Type请求头,而Flutter侧请求携带了Content-Type: application/json的自定义头,会触发HTTP客户端的CORS预检OPTIONS请求:

  • 预检请求未通过校验的情况下,正式POST请求的请求体不会发送到后端,直接导致php://input读取为空。
  • 修复方案,修改PHP的跨域头配置:
<?php
header('Content-Type: application/json');
header("Access-Control-Allow-Origin: *");
// 新增允许POST和OPTIONS请求
header("Access-Control-Allow-Methods: POST, OPTIONS");
// 新增允许Content-Type头
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Origin, Accept");

// 新增OPTIONS请求处理逻辑,直接返回200
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    http_response_code(200);
    exit();
}

// 原有后续业务逻辑不变
include 'connect.php';
// ... 剩余代码

2. 服务器重定向导致请求体丢失

如果请求地址和PHP实际部署地址不完全匹配,会触发301/302重定向,重定向过程中POST请求的请求体默认会被丢弃:

  • 检查Flutter侧请求的地址是否和PHP部署地址完全一致:包括http/https协议、是否带www前缀、路径结尾是否多/少斜杠、路径大小写是否匹配。

3. PHP配置异常导致无法读取请求体

检查服务器php.ini配置项:

  • 确认enable_post_data_reading配置为On
  • 确认post_max_size配置值大于你实际发送的请求体大小

4. 问题排查验证方法

可以先用Postman等接口测试工具,直接向PHP接口发送JSON格式的POST请求:

  • 如果工具请求能正常读取到php://input内容,说明问题出在Flutter侧请求配置或者CORS跨域配置
  • 如果工具请求也读不到内容,说明问题出在PHP侧配置或者服务器部署规则

额外安全优化建议

你当前的PHP代码存在严重安全风险:

  • 直接拼接用户输入到SQL语句,存在SQL注入漏洞,建议替换为mysqli预处理绑定参数的写法
  • MD5加密密码安全性极低,建议使用PHP自带的password_hash()加密存储密码,校验时用password_verify()做验证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:06:05