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

Android发送请求成功但PHP无法接收POST数据问题咨询

为什么Android POST请求返回200,但PHP的$_POST是空数组?

这个问题我之前帮同事排查过好多次,看似奇怪其实都是常见的细节问题,咱们一个个来拆解:

1. 请求头Content-Type不匹配

这是最常见的原因!PHP对$_POST的解析完全依赖请求头类型:

  • 如果你是普通表单提交,必须把请求头设为 application/x-www-form-urlencoded,同时请求体是key1=value1&key2=value2的键值对格式,PHP才会自动把数据解析到$_POST里。
  • 如果你在Android里发送的是JSON数据,请求头一般是application/json,这时候PHP默认不会把JSON数据放到$_POST里,你得手动读取原始请求体再解析:
    $jsonRaw = file_get_contents('php://input');
    $postData = json_decode($jsonRaw, true);
    

2. Android端请求体格式错误

就算你设对了application/x-www-form-urlencoded,如果请求体不是标准的键值对格式,PHP也解析不了。比如:

  • 直接传了纯文本或未编码的JSON字符串
  • 键值对里的特殊字符(空格、&、=等)没做URL编码
    建议用Android自带的UrlEncodedFormEntity或者OkHttp的FormBody来构建请求体,它们会自动帮你处理编码和格式问题。

3. 不小心用了GET请求

虽然你说的是POST请求,但有时候代码里会写错——比如OkHttp里调用了get()而非post(),或者HttpURLConnection的setRequestMethod设成了GET。这时候请求确实能到服务器(返回200),但数据是放在URL参数里的,PHP只会把它放到$_GET里,$_POST自然是空的,赶紧检查下Android代码里的请求方法!

4. PHP配置或服务器限制

这种情况比较少见,但也不能忽略:

  • php.ini里的post_max_size设置太小,导致POST数据被截断,PHP无法解析
  • max_input_vars设置得不够,无法容纳你提交的所有键值对
  • 服务器的rewrite规则(比如Apache/Nginx的.htaccess配置)把POST请求转成了GET,导致数据丢失
    你可以查看PHP的错误日志,或者临时在代码里打印phpinfo()来检查这些配置。

快速排查步骤

  1. 用抓包工具(比如Charles、Fiddler)确认Android发送的请求:请求方法是POST、Content-Type正确、请求体格式符合要求
  2. 根据请求类型调整PHP的读取方式(表单用$_POST,JSON用php://input)
  3. 排查PHP配置和服务器rewrite规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:04:09