我正在研究一个系统,目前正在尝试实现另一个(外部)系统可以发布到某些数据的脚本,以便我可以存储它们。
我无法控制外部系统 - 我可以触发它将数据发布到我的系统,给它我的脚本的URL。
当帖子发生时,看着firebug,我可以看到发布的数据,如下所示:
或(urldecoded)
content={"sex":"male","person":{"name":["chris"],"mbox":["mailto:name.lastename@gmail.com"]}}
&Content-Type=application/json
&auth=DDE233H76BGN
我的问题是,当我在脚本中尝试获取这些参数时,$ _POST(和$ _REQUEST)始终为空!
我已尝试var_dump($_POST)
或echo file_get_contents("php://input");
,但我看不到任何内容。
我在这里想念的是什么? 我不知道是否需要响应/请求标头来获取它的东西,我在这里显示它们以防万一
修改
我的脚本现在包含一行代码,例如:
<?php
var_dump($_POST);
?>
或
<?php
echo file_get_contents("php://input");
?>
他们两个都绝对没有给我:s
答案 0 :(得分:1)
应使用$arr= json_decode($_POST['content']);
访问数据...但此处还有其他问题。
缺少详细信息:
... firebug如何能够向您显示从外部系统发送到您网站的$ _POST的内容(也就是说:请求不通过您的浏览器,但可能是通过来自外部的CURL请求)服务器)。显然,我在这里得不到什么。
我看到的是您的浏览器发送的POST请求(在javascript中),由您的网站制作。 你的问题错过了一个重要的细节,我只是不确定它是什么。
<强>提示:强>
尝试在你的var_dump之前放一个echo 'test';
,我觉得你可能没有调试我们在Firebug中看到的Ajax POST请求真正调用的页面。一点路由问题?
答案 1 :(得分:0)
让我们看看RFC 1945,看看“参数”是什么
parameter = attribute "=" value
attribute = token
token = 1*<any CHAR except CTLs or tspecials>
CTL = <any US-ASCII control character
(octets 0 - 31) and DEL (127)>
所以我认为“Content-Type = application / json”不是POST的有效部分,因为“ - ”不是CTL
答案 2 :(得分:0)
您应该尝试查看原始POST数据变量:
echo $HTTP_RAW_POST_DATA;