可以';t读取原始POST正文数据—在本例中如何执行此操作


Can't read raw POST body data - how to do this in this example?

我正在为另一个开发人员的服务器设置一个API。我目前正在使用Flash AIR将POST数据发送到我的服务器,并简单地提取中的变量

$command = $_POST['command'].

然而,他没有使用Flash,而是发送这样的数据:

https://www.mysite.com POST /api/account.php?command=login HTTP/1.1
Content-Type: application/json
Connection: close
command=login
params {"pass":"12345678","token":"","appID":"theirApp","user":"johnnyb","ver":"2.0","Library_ID":"1"}

我的服务器正在向他返回一个错误,说"command"参数丢失。

我需要做什么才能从他的上述数据中提取$_POST var"command"?

我尝试过file_get_contents('php://input')http_get_request_body(),但尽管它们没有出错,但它们没有显示任何内容。

谢谢你的帮助。

来自@Cole的"内容类型应该是www形式的urlended"(正确答案)

更多信息请点击此处:http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1

请求声称它正在发送JSON。

内容类型:application/json

然而,这:

command=login
params {"pass":"12345678","token":"","appID":"theirApp","user":"johnnyb","ver":"2.0","Library_ID":"1"}

…不是JSON。

如果你去掉了{之前的所有内容,那么它将是JSON,你应该能够用file_get_contents('php://input')读取它(然后可以通过解码器。

我试过file_get_contents('php://input')http_get_request_body()…它们什么都不显示。

它们应该起作用。

当我为命令打印file_get_contents('php://input')时…我得到命令=登录,但。。。

我以为你说你没有得到任何

if(!isset($_POST['command']))

$_POST将仅针对两种标准HTML表单编码方法进行填充。如果您使用的是JSON,那么它不会被自动解析,您必须自己进行解析(使用有效的JSON输入(因此额外的数据需要与其他数据一起编码在JSON文本中),file_get_contents('php://input')decode_json)。

命令参数需要是数据的一部分,整个参数应该是有效的JSON。照原样,command=login,它不是有效的JSON。

将其添加到params对象或制作一个包含对象,如

{
 command:'login',
 params :{"pass":"12345678","token":"","appID":"theirApp","user":"johnnyb","ver":"2.0","Library_ID":"1"}
}