检查请求是 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配置的请求方式?

C# 判断当前请求是GET还是POST ?

spring mvc 默认请求是get 还是 post

有没有人遇到nginx做代理,get请求有效,post请求是404

请问一下随便写一个链接向tomcat发送一个请求是get方式还是post方式啊,谢谢

ajaxpost请求data是url还是body