RAW(JSON)POST数据作为NULL或EMPTY ARRAY到达

时间:2017-12-07 16:06:44

标签: php post

我试图用PHP创建一个REST API并且我遇到了接收POST数据的问题,如果我用表单发送它,它就完全没问了。 但是当我尝试使用Content-Type application / json 发送它时,它会以空数组的形式发送。

以下是接收数据的代码:

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

数据通过Boomerang REST客户端发送。

这是请求的标题:

POST /miel/api/inscripcion-tutoria HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 0
Origin: chrome-extension://eipdnjedkpcnlmmdfdkgfpljanehloah
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
Content-Type: application/json
Accept: */*
DNT: 1
Accept-Encoding: gzip, deflate, br
Accept-Language: es-419,es;q=0.9,en;q=0.8,fr;q=0.7
Cookie: PHPSESSID=b586e11ef9d81...bd992603a; _ga=GA1.1.20...67.151250

回应就是这个:

HTTP/1.1 200 OK
Date: Thu, 07 Dec 2017 15:49:46 GMT
Server: Apache/2.4.27 (Unix) PHP/7.1.7
X-Powered-By: PHP/7.1.7
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

请注意,Content-Length为0,当y执行var_dump时,数据完全为空。

我也试过这个:

die(var_dump($_POST));

最后一个示例仅在我使用FORM

发送数据时才有效
<form action=http://localhost/miel/api/inscripcion-tutoria method=post >

如果表单内容类型为

Content-Type: application/x-www-form-urlencoded

响应标头中的内容长度相同。

但是,如果我更改回旋镖REST客户端中的内容类型并将其放置为表单中发送的内容类型,那么它既不会工作。

我尝试使用变量$HTTP_RAW_POST_DATA并且var_dump返回NULL。

对此解决方案的任何线索都将非常感谢! 谢谢!

2 个答案:

答案 0 :(得分:1)

我终于找到了问题的解决方案。这很简单,而且经验不足。

当您使用POSTMAN或Boomerang或任何其他REST客户端发送请求时,数据必须位于请求正文

我正在使用&#34; PARAMS&#34;的空白字段。由客户提供,但这些是为了向URL添加项目,而不是为正文建立数据结构。

答案 1 :(得分:0)

如果您要使用以下方法获取数据:

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

POSTMAN Rest Client 中,选择“ Body”,这将为您提供向Request Body添加参数的选项。

选择原始,然后粘贴您的 JSON

确保将请求的Content-Type 标题设置为“ application/json

request body pass json data

希望这会有所帮助。