我正在为另一个开发人员的服务器设置一个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"}
}