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

Flutter发送HTTP POST请求后PHP服务端$_POST为空的问题求助

Flutter发送HTTP POST请求后PHP服务端$_POST为空的问题求助

大家好,我最近碰到个棘手的问题,想请各位帮忙看看!我在Flutter应用里写了一段发送POST请求的代码,但是PHP服务端用$_POST获取数据时始终是空数组,可我用Postman测试同样的参数,$_POST里就能正常拿到数据,实在搞不清哪里出问题了,麻烦帮我分析下!

我的Flutter请求代码:

发送请求的函数:

static Future<List<dynamic>?> postData(data) async {
  var body = json.encode(data);
  Map<String, String> headers = {"Content-Type": "application/json"};
  var url = Uri.http(Config.api, Config.endPoint);
  var response = await client.post(url, headers: headers, body: body);
  
  if (response.statusCode == 201) {
    var data = jsonDecode(response.body);
    return data;
  }
  return null;
}

要发送的数据:

Map data = {
  'database': 'school_control_ykt',
  'table': 'tablets_helper',
  'place': place,
  'reason': reason,
  'teacher': teacher,
  'name': name,
  'id_group': id_group
};

postData(data);

问题描述

按照上面的代码发送请求后,PHP端的$_POST始终是空的,但用Postman提交相同参数时,$_POST能正常获取到所有数据,这到底是哪里出问题了?


问题原因和解决方案

其实核心问题出在请求的数据格式和PHP的解析逻辑上:

PHP的$_POST默认只会自动解析application/x-www-form-urlencoded(表单键值对)或者multipart/form-data(文件上传类表单)格式的请求体,而你在Flutter里设置了Content-Type: application/json,并且把数据编码成JSON字符串发送,这种格式$_POST是识别不了的。

而你用Postman测试正常,应该是因为你在Postman里选择了表单格式(比如form-data或x-www-form-urlencoded)发送参数,而非JSON格式,所以$_POST能正常解析。

这里有两种解决方案:

方案1:修改Flutter代码,发送表单格式数据

把请求改成发送标准表单格式,这样PHP的$_POST就能直接识别。修改后的Flutter代码:

static Future<List<dynamic>?> postData(data) async {
  var url = Uri.http(Config.api, Config.endPoint);
  // 直接传入data,http库会自动将其转换为application/x-www-form-urlencoded格式
  var response = await client.post(url, body: data);
  
  if (response.statusCode == 201) {
    var data = jsonDecode(response.body);
    return data;
  }
  return null;
}

方案2:修改PHP代码,解析JSON格式请求体

如果不想改动Flutter的请求格式,仍然要发送JSON,那就在PHP端直接读取原始请求体并解析:

// 读取请求的原始内容
$rawRequestBody = file_get_contents('php://input');
// 将JSON字符串解析为关联数组
$requestData = json_decode($rawRequestBody, true);

// 之后就可以通过$requestData['database']、$requestData['table']等方式获取参数了

这样不管是Flutter发送的JSON请求,还是Postman以raw JSON格式发送的请求,都能正确获取到数据。

备注:内容来源于stack exchange,提问作者Andres Thomas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:42:33