从PHP中的JSON POST读取HTTP请求正文的问题

Har*_*ody 51 php post json http-post

我正在编写一个注册为webhook端点的脚本.我知道它已成功注册,因为我正在将每个请求的标头写入我的服务器日志.这是一个示例:

Content-Type: text/xml; charset=UTF-8
User-Agent: Jakarta Commons-HttpClient/3.1
Host: =={obfuscated}== 
Content-Length: 1918
Run Code Online (Sandbox Code Playgroud)

我注册的API是将JSON对象发布到我的脚本,我想使用PHP解析该对象.正如您从请求标头中看到的那样,有一个很好的大胖JSON对象等待解析.这似乎很简单,但事实并非如此.

起初我尝试使用$_POST['json']或只是$_POST因为数据不在数组中,我真的不确定如何访问它.

我尝试过使用file_get_contents('php://input')fopen('php://input', 'r')不使用json_decode()但没有运气.我无法使用,http_get_request_body()因为我所使用的服务器没有PECL,这是我无法控制的.

有没有其他方法可以与我错过的POST-ed JSON对象进行交互?谢谢!

Har*_*ody 147

感谢其他人的投入.事实证明,我只是需要

$inputJSON = file_get_contents('php://input');
$input = json_decode($inputJSON, TRUE); //convert JSON into array
Run Code Online (Sandbox Code Playgroud)

其中第二个参数json_decode将对象作为数组返回.

希望这有助于其他人!

  • 也适合我.只是无法相信PHP无法识别JSON数据.我知道它毕竟是原始数据类型,但仍然...... (6认同)
  • 当接收到具有`application/x-www-form-urlencoded`或`multipart/form-data`**Content-Type**标头的请求主体时,`$ _POST`仅填充值.由于PHP请求体的流特性,您将获得`$ _POST`***或***输入流中的数据,而不是两者. (4认同)

Exe*_*rre 5

即使以下方法有效。

$inputJSON = file_get_contents('php://input');
Run Code Online (Sandbox Code Playgroud)

如果您想继续使用 $_POST 将数据作为 FormData 发送

var fd = new FormData();
fd.append('key', 'value');
return axios.post('url', fd)
Run Code Online (Sandbox Code Playgroud)