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

时间:2011-08-13 01:07:19

标签: php json post http-post

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

Content-Type: text/xml; charset=UTF-8
User-Agent: Jakarta Commons-HttpClient/3.1
Host: =={obfuscated}== 
Content-Length: 1918

我注册的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对象进行交互?谢谢!

2 个答案:

答案 0 :(得分:129)

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

$inputJSON = file_get_contents('php://input');
$input = json_decode($inputJSON, TRUE); //convert JSON into array

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

希望这有助于其他人!

答案 1 :(得分:0)

即使以下情况有效。

$inputJSON = file_get_contents('php://input');

如果要继续使用$ _POST,请以FormData的形式发送数据

var fd = new FormData();
fd.append('key', 'value');
return axios.post('url', fd)