检查请求是 GET 还是 POST [重复]
Posted
技术标签:
【中文标题】检查请求是 GET 还是 POST [重复]【英文标题】:Check whether a request is GET or POST [duplicate] 【发布时间】:2010-11-25 05:19:18 【问题描述】:可能重复:php detecting request type (GET, POST, PUT or DELETE)
这应该很容易。
我有一个脚本,在脚本中我想确定请求是通过GET
还是POST
方法到达的。
正确的做法是什么?
我正在考虑使用类似的东西
if (isset($_POST))
// do post
else
// do get
但在我内心深处,我觉得这不是正确的方法。有什么想法吗?
【问题讨论】:
如果您以处理变量为目标而不考虑请求类型,为什么不能尝试 $_REQUEST["variable_name"]? @AnoopPete - 因为这不是被问到的。 $_REQUEST 将接受 GET、POST、PUT、DELETE(任何东西)。这种做法不仅可怕,而且可能导致安全风险。想象一下,您的逻辑只是期望表单 POST 方法,但您允许接受任何/所有方法。这可能会在坏人手中造成可怕的后果。 尝试使用它,它将帮助您无论是获取还是发布表单 if( $_REQUEST["name"] || $_REQUEST["age"] ) echo "Welcome ". $_REQUEST['name']。 "";回声“你是”。 $_REQUEST['年龄']。 “岁。”;出口(); 【参考方案1】:使用$_SERVER['REQUEST_METHOD']
。
【讨论】:
【参考方案2】:更好地使用$_SERVER['REQUEST_METHOD']
:
if ($_SERVER['REQUEST_METHOD'] === 'POST')
// …
【讨论】:
@Gumbo 我们需要===
,如果我使用==
会怎样
您可以使用===
或 ==
。前者只是一种很好的做法,因为它检查变量是否“相同”。 (例如:5 == '5'
是 true
,但 5 === '5'
是 false
)
如果它既不是 GET 也不是 POST,也考虑返回 405。 if ($_SERVER['REQUEST_METHOD'] === 'POST') // 发布 elseif ($_SERVER['REQUEST_METHOD'] === 'GET') // 获取 else http_response_code(405) ;死();
根据NetBeans IDE,直接访问$_SERVER
不好。所以,在这种情况下,替代方案是if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') === 'POST') …
。
我经历过 PHP 不主动设置 $_POST 全局变量的环境,所以我同意使用上述方法更可靠。以上是关于检查请求是 GET 还是 POST [重复]的主要内容,如果未能解决你的问题,请参考以下文章
springmvc 能否通过代码获取到请求是post还是get?还有action配置的请求方式?
有没有人遇到nginx做代理,get请求有效,post请求是404