Php Can';t读取原始正文数据-在本例中如何执行此操作?
我正在为我的服务器为另一个开发人员设置API。我目前正在使用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=
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(“命令缺失”);只为他的代码发送错误。某人如何手工编码?