为何使用$_POST无法获取数据?PHP数据接口开发问题
为什么PHP发送JSON格式POST请求后,$_POST无法获取数据?
嘿,我明白你遇到的问题了——你用A.php发送了JSON格式的POST请求到B.php,明明能收到响应证明连通性没问题,但B.php里的$_POST就是空的,对吧?
问题根源
PHP的$_POST超全局变量默认只会自动解析两种格式的请求体:
application/x-www-form-urlencoded(普通表单提交格式)multipart/form-data(文件上传表单格式)
而你在A.php里设置的Content-Type: application/json,这种格式的请求体PHP不会自动解析到$_POST里,所以你拿到的就是空数组。
解决办法
直接读取原始的请求体内容,再解析成JSON数据就可以了,修改你的B.php代码如下:
// B.php // 读取原始请求体 $rawJson = file_get_contents('php://input'); // 解析成关联数组(第二个参数true会转成数组,否则是对象) $data = json_decode($rawJson, true); // 测试输出 print_r($data); echo 'I have recieve it';
这样就能正确获取到你从A.php发送的JSON数据了。
额外说明
如果你非要用$_POST来获取数据,那需要修改A.php的请求格式,把JSON改成表单编码格式:
// A.php 修改部分 $options = [ 'http' => [ 'method' => 'POST', 'content' => http_build_query($data), // 转成表单格式 'header' => "Content-Type: application/x-www-form-urlencoded\r\n" ] ];
但既然你原本就是要发送JSON数据,第一种直接解析原始请求体的方法更贴合你的需求。
内容的提问来源于stack exchange,提问作者Tom Tao
相关产品推荐
相关产品推荐

