Android Studio中使用Fuel发送POST请求至PHP时后端接收为空的问题
问题根因
1. 请求内容类型与PHP $_POST 的解析机制不兼容
- Fuel的
.jsonBody()方法在发送请求时,会自动将Content-Type请求头设置为application/json,请求主体为纯JSON序列化文本。 - PHP的
$_POST超全局数组仅自动解析两类POST请求体:- 标准表单编码
application/x-www-form-urlencoded - 文件上传编码
multipart/form-data
- 标准表单编码
- 对
application/json格式的原始请求体,PHP不会自动执行解析逻辑,此时访问$_POST必然返回空数组,也就是你看到的Array()输出。
2. 示例代码存在地址偏差
- 你贴出的Fuel请求示例使用的是第三方公共测试地址
https://httpbin.org/post,和你的自有test.php服务地址不匹配;即便你实际测试时将地址替换为了自有后端,只要使用jsonBody发送application/json格式请求,依然会触发$_POST为空的问题。
可直接落地的修复方案
方案A:改用表单格式发送请求,匹配$_POST的解析规则
如果你的后端需要把参数存入$_POST数组,就不要使用jsonBody构造请求,改用Fuel的表单参数构造方法,自动生成PHP可识别的编码格式:
Fuel.post("http://你的后端服务地址/test.php") .body(listOf("foo" to "bar")) // 自动携带application/x-www-form-urlencoded请求头 .response { result -> println(result) }
这种格式发送的请求,PHP解析后$_POST会正常填充foo=bar的内容。
方案B:后端适配JSON请求体的解析逻辑
如果业务场景要求必须发送JSON格式的请求体,就需要修改PHP端的测试代码,手动读取原始请求体做解析,不能直接读取$_POST:
<?php // 读取原始POST请求流内容 $rawRequestBody = file_get_contents('php://input'); // 将JSON文本转为关联数组输出 $parsedContent = json_decode($rawRequestBody, true); print_r($parsedContent); ?>
内容的提问来源于stack exchange,提问作者user2783211
相关产品推荐
相关产品推荐

