Php Can';t读取原始正文数据-在本例中如何执行此操作?

Php Can';t读取原始正文数据-在本例中如何执行此操作?,php,http,http-post,Php,Http,Http Post,我正在为我的服务器为另一个开发人员设置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=

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

我需要做什么才能从上面的数据中提取$_postvar‘command’

我尝试了
文件获取内容('php://input)
http\u get\u request\u body()
,但尽管它们没有出错,但它们没有显示任何内容


谢谢您的帮助。

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

将其添加到
params
对象,或创建一个包含对象,如

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

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

将其添加到
params
对象,或创建一个包含对象,如

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

请求声称它正在发送JSON

内容类型:application/json

然而,这:

…不是JSON

如果在
{
之前去掉了所有内容,那么它将是JSON,您应该能够使用
文件\u get\u内容('php://input”)
(然后可以将其传递

我尝试了
文件获取内容('php://input“)
http\u get\u request\u body()
…它们什么也不显示

它们应该起作用

当我打印出
文件时,获取内容('php://input)
对于通信…我得到命令=登录,但是

我以为你说你什么都没得到

if(!isset($\u POST['command'])


$\u POST
将仅为两种标准HTML表单编码方法填充。如果您使用的是JSON,那么它将不会被自动解析,您必须自己进行解析(使用有效的JSON输入(因此附加数据需要与其余数据一起编码在JSON文本中)),
文件获取内容('php://input')
解码_json
)。

请求声称它正在发送json

内容类型:application/json

然而,这:

…不是JSON

如果在
{
之前去掉了所有内容,那么它将是JSON,您应该能够使用
文件\u get\u内容('php://input”)
(然后可以将其传递

我尝试了
文件获取内容('php://input“)
http\u get\u request\u body()
…它们什么也不显示

它们应该起作用

当我打印出
文件时,获取内容('php://input)
对于通信…我得到命令=登录,但是

我以为你说你什么都没得到

if(!isset($\u POST['command'])

$\u POST
将仅为两种标准HTML表单编码方法填充。如果您使用的是JSON,那么它将不会被自动解析,您必须自己进行解析(使用有效的JSON输入(因此附加数据需要与其余数据一起编码在JSON文本中)),
文件获取内容('php://input')
解码_json
)。

来自@Cole的“内容类型应为www-form-urlencoded”(正确答案)

更多信息请参见:

“内容类型应为www-form-urlencoded”,来自@Cole(正确答案)


此处的更多信息:

谢谢Cole。仍然会出现相同的错误。为了更简单,我删掉了params var,所以我们只是尝试提取命令var。当我打印文件时,获取内容('php://input“)用于来自闪存和其他开发人员代码的通信(FY--他不使用PHP,用C++编写,甚至不用库,除了在MAC上的CFNETH),我得到命令=登录,但是……(如果!ISSET($IsPo[(命令)]))SeDeRror(“命令缺失”);只为他的代码发送错误。某人如何手工编写一个“HTTP POST”?结构的头部和/或身体,所以它结束PHP $POST VARS?@肖恩,第二个想法是:这是疯狂的。服务器不接受JSON编码的POST数据。它需要MIME类型WWW形式的URLNECOND,并作为键值对发送。AHH -我不询问如何修改服务器接受数据,我问C++客户端如何制定HI。我们的服务器工作正常,对于运行Flash和使用该库进行通信的客户端来说,工作正常。但是,C++客户端必须创建的输出格式是什么?“MIME类型WWW格式URL编码和作为键值对发送”究竟是什么?看起来像?如果有人能够发布一个具体的例子,它会很有帮助。谢谢大家!@Shaun内容类型应该是www-form-urlencoded,而不是application/json。然后它看起来像command=whatever¶ms=whatever,所有的特殊字符都是URL编码的(只要搜索一下就可以了…)如果没有一个库,我会很惊讶,但是我不知道C++。你可以发送一个JSON的有效载荷,被服务器解密……而不是帖子中的内容类型JSON。嘿,科尔。你关于WWW表单URLLCOND的线索解决了这个问题(尽管我从来没有问过他,因为我们兴奋地继续使用API编码!)。他说他查了一下-然后就查了。谢谢你,伙计!!!!!谢谢科尔。仍然会出现同样的错误。为了更简单,我删掉了params var,所以我们只是在尝试提取命令var。当我打印文件时php://input“)用于来自闪存和其他开发人员代码的通信(FY--他不使用PHP,用C++编写,甚至不用库,除了在MAC上的CFNETH),我得到命令=登录,但是……(如果!ISSET($IsPo[(命令)]))SeDeRror(“命令缺失”);只为他的代码发送错误。某人如何手工编码?