Php 带参数的窗体操作-参数不在$\u GET或$\u POST中

Php 带参数的窗体操作-参数不在$\u GET或$\u POST中,php,post,get,request,superglobals,Php,Post,Get,Request,Superglobals,我正在重新实现一个RESTAPI,客户端没有源代码,正在失去对服务器的访问 我发现来电者正在发送帖子,但没有发布数据。所有参数都在URL中指定,或者如果它是一个发布表单,那么操作将是什么 像这样: "POST http://foo.com/api/rest/?method=users.add_user&token=foo&section=bar&group=baz HTTP/1.1" 200 605 "-" "-" 令我惊讶的是,这些参数既不在$\u GET中,也不在

我正在重新实现一个RESTAPI,客户端没有源代码,正在失去对服务器的访问

我发现来电者正在发送帖子,但没有发布数据。所有参数都在URL中指定,或者如果它是一个发布表单,那么操作将是什么

像这样:

"POST http://foo.com/api/rest/?method=users.add_user&token=foo&section=bar&group=baz HTTP/1.1" 200 605 "-" "-" 
令我惊讶的是,这些参数既不在$\u GET中,也不在$\u POST中,而只在$\u请求中可用

我是不是遗漏了什么?为什么它们不在$\u GET中作为URL访问的一部分?显而易见的答案是“因为这是一篇文章,所以GET是未定义的”


有人能告诉我我对这些超全局变量的误解吗?

$\u GET和$\u POST是空的,因为您使用的是POST协议,但通过GET方法发送变量(在URL中编码)

PHP正在查找使用的POST方法,因此它将$\u GET变量中的信息设置为nothing,然后将表单POST数据中发送的变量解析为$\u POST变量,即:nothing

另一方面,$_REQUEST变量在另一种机制上运行,它将解析来自请求的所有变量,无论这些变量来自cookie、多部分数据、post、get等。这就是您在那里看到它们的原因


通常情况下,脚本和应用程序都会使用$\u请求数据,因为它是所有数据的一个更简洁的集合,而且从技术上讲,您不可能在同一个请求中获取和发布数据,因此您不必担心数据集之间的冲突。

这是一个很长的可能性,但是$\u请求通常还包括$\u COOKIE。是否有可能在客户端的cookie中设置这些相同的密钥?您知道,在url中指定参数是表单的“获取方式”,而“发布方式”将在http正文中发送它们?我想这可能与此有关(尽管我对php了解不够)。如果使用GET作为方法会发生什么?@ZPiDER-帖子来自一个远程脚本,不在我的控制范围内,但我的问题不是关于调试该过程。@Andrew-我不这么认为$_GET和$\u POST完全为空,$\u请求包含URL中的所有变量…非常感谢。这正是我直到今天才学到的东西。非常感谢!那么,当我向somepage.php?key=blah提交表单时,即使没有POST数据,
$\u GET['key']
是否存在,还有一个警告。有时,只有在正确发布变量的情况下,您才会显式地想要它。在这种情况下,检查$\u POST并忽略$\u请求是首选的机制。这通常是当你采取“破坏性”行动(以某种方式改变数据)时,你真的不希望谷歌干预。@Kolink我见过在某些服务器/配置上从POST请求接收GET变量的情况,而且我从来没有真正费心去探究这些情况的原因“哎呀,我没有改变表单方法“不管怎样,我都不在乎,哈哈,但我自己也见过这种情况。我猜是有一个bug,但是由于大多数人在编写代码时正确地表达了他们的请求,并在脚本中使用了适当的超全局,我认为这只是大多数人没有注意到的一个例子,而那些注意到的人,修复了他们的错误,并不关心PHP是否被删除:P