PHP获取不到POST参数

在与客户端调试接口时,定义了如下接口:

接口地址:domain/post/update

请求方式:POST

参数 类型 必填 示例 说明
id string 1001 要更改的ID
remark string testcontent 标记的内容

然后服务端在通过$_POST[‘id’], $_POST[‘remark’]获取参数时,Android客户端提交上来的参数一直获取不到,iOS客户端提交的参数正常获取。与Android客户端确认,确实是通过post提交的参数。

于是抓包对比:
Android客户端的请求

POST /post/update HTTP/1.1
Host: test.xxx.com
Content-Type: application/json
Cookie: PHPSESSID=mpm4aon96fm2bebc1jqud72g91
Content-Length: 30

{"id":"1001","remark":"testcontent"}

iOS客户端的请求

POST /post/update HTTP/1.1
Host: test.xxx.com
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=mpm9uidf96fm2bebc1jqud72g91
Content-Length: 20

id=1001&remark=testcontent

对比一下一目了然,虽然Android客户端是通过post提交的参数,但是Content-Type为:application/json,是通过json提交的,这样php通过$_POST 是无法获取到参数的。$_POST只能获取到Content-Type为:application/x-www-form-urlencoded和multipart/form-data 提交上来的数据。Content-Type:application/json提交上来的数据,php可以如下处理:

$postData = file_get_contents('php://input');
$data = json_decode($postData, true);

所以在定义接口文档的时候,不能仅仅只定义说是post请求,还要明确定义Content-Type类型,明确请求数据格式。

Content-Type类型的具体介绍:post提交数据的3种常见方式

发表回复