我试图用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。
对此解决方案的任何线索都将非常感谢! 谢谢!
答案 0 :(得分:1)
我终于找到了问题的解决方案。这很简单,而且经验不足。
当您使用POSTMAN或Boomerang或任何其他REST客户端发送请求时,数据必须位于请求正文。
我正在使用&#34; PARAMS&#34;的空白字段。由客户提供,但这些是为了向URL添加项目,而不是为正文建立数据结构。
答案 1 :(得分:0)