根据http头判断用户来源是GET还是POST

OSC上看了有人问怎么判断用户是GET来的还是POST来的,这里做个笔记

HTTP头里有一个Request Method,表示请求是GET还是POST

贴上一段代码YII的代码

// 返回当前请求的方法,请留意方法名称是大小写敏感的,按规范应转换为大写字母
public function getMethod()
{
    // $this->methodParam 默认值为 ‘_method‘
    // 如果指定 $_POST[‘_method‘] ,表示使用POST请求来模拟其他方法的请求。
    // 此时 $_POST[‘_method‘] 即为所模拟的请求类型。
    if (isset($_POST[$this->methodParam])) {
        return strtoupper($_POST[$this->methodParam]);

    // 或者使用 $_SERVER[‘HTTP_X_HTTP_METHOD_OVERRIDE‘] 的值作为方法名。
    } elseif (isset($_SERVER[‘HTTP_X_HTTP_METHOD_OVERRIDE‘])) {
        return strtoupper($_SERVER[‘HTTP_X_HTTP_METHOD_OVERRIDE‘]);

    // 或者使用 $_SERVER[‘REQUEST_METHOD‘] 作为方法名,未指定时,默认为 GET 方法
    } else {
        return isset($_SERVER[‘REQUEST_METHOD‘]) ?
            strtoupper($_SERVER[‘REQUEST_METHOD‘]) : ‘GET‘;
    }
}

这个方法使用了3种方法来获取当前用户的请求,优先级从高到低依次为:

  • 当使用POST请求来模拟其他请求时,以 $_POST[‘_method‘] 作为当前请求的方法;
  • 否则,如果存在 X_HTTP_METHOD_OVERRIDE HTTP头时,以该HTTP头所指定的方法作为请求方法, 如 X-HTTP-Method-Override: PUT 表示该请求所要执行的是 PUT 方法;
  • 如果 X_HTTP_METHOD_OVERRIDE 不存在,则以 REQUEST_METHOD 的值作为当前请求的方法。 如果连 REQUEST_METHOD 也不存在,则视该请求是一个 GET 请求。

前面两种方法,主要是针对一些只支持GET和POST等有限方法的User Agent而设计的。

时间: 2024-12-26 05:47:21

根据http头判断用户来源是GET还是POST的相关文章

获取ip,判断用户所在城市

PHP获取IP地址 这个比较简单了,利用PHP自带函数就可以了,PHP中文手册看一下,都有现成的例子,就不过多说明了,直接上代码,A段: <? //PHP获取当前用户IP地址方法 $xp_UserIp = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"]; $xp_UserIp = ($xp_UserIp) ? $xp_Us

springmvc3 拦截器,过滤ajax请求,判断用户登录,拦截规则设置

web.xml设置:(/拦截所有请求) <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name&

请求头获取用户设备、点赞

请求头获取用户设备.点赞 一.GooGle浏览器:使用插件User Agent Switcher, URL sniffer 0.9.3.9或者使用User Agent Switcher,调整用户设备请求头 1.获取用户设备请求头的意义,QQ的空间动态,会有手机类型的显示,其实现原理就是获取设备的请求头文件,使用方法或正则匹配出来显示到用户的客户端:还可以通过进行判断让其再不同的终端中显示不同的页面,实现多终端多效果. 2.安装User Agent Switcher, URL sniffer 0.

判断用户选择的日期是否为星期一

在平台中如何判断用户选择的日期是否为星期一?实现代码如下图所示: 原文地址:http://bbs.delit.cn/thread-888-1-1.html 转载请注明出处: 撰写人:度量科技http://www.delit.cn

Discuz!X 插件开发判断用户是否登录的代码怎么写

转:http://www.bacysoft.cn/thread-71-1-1.html Discuz!X 插件开发判断用户是否登录的代码怎么写? 我们开发插件的时候,经常需要判断访问用户是否为注册用户,如果是则允许访问,否则弹出登录窗口提示用户登录! 实现此功能的代码如下: if(empty($_G['uid'])) { showmessage('to_login', '', array(), array('showmsg' => true, 'login' => 1)); } 复制代码 $_

js判断用户是否正在滚动滚动条,滚动条滚动是否停止

js智能判断是否可以自动滚动 比如,做一个音乐播放器,边播放,边定位歌词,播放的时候,需要自动定位到播放语句,但是用户去拖动或者滚动div(歌词面板)时,这时就必须停止自动滚动,或者说是不能自动滚动,这个怎么做呢? 如果能时时判断 用户是否在滚动就好了? 或者能够 知道滚动开始 和 结束事件 也行? 可惜均不知道! 目前,仅可以利用的就是div元素的滚动事件,下面是我的实现思路,如何判断用户是否滚动停止? 1.html代码 <div id="panel"> <div

C#判断用户是手机访问还是PC访问

今天在做一个wap网站时,需要限制PC用户访问.网上找了很多资料,效果都不怎么理想.其实原理就是根据HTTP_USER_AGENT判断检查用户在用什么浏览器,再根据业务做相应的逻辑处理. 代码如下: 1 public class IsPhoneAttribute : ActionFilterAttribute 2 { 3 public override void OnActionExecuting(ActionExecutingContext filterContext) 4 { 5 strin

Android 判断用户2G/3G/4G移动数据网络

在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需要根据用户当前网络情况来做一些调整的,也可以在 App 的设置模块里,让用户自己选择,在 2G / 3G / 4G 网络条件下,是否允许请求一些流量比较大的数据. 通过 Android 提供的 TelephonyManager 和 ConnectivityManager 都可以获取到 NetworksInfo 对象,可以通过 getType() 获取类型,判断是 wifi 还是 mobile ,

alertDialog创建登陆界面,判断用户输入

alertDialog创建登陆界面,需要获取用户输入的用户名和密码,获取控件对象的时候不能像主布局文件那样获得, 需要在onClickListener中获取,代码如下: 1 public boolean onOptionsItemSelected(MenuItem item) { 2 // TODO Auto-generated method stub 3 switch(item.getItemId()){ 4 case 1: 5 Intent intent = new Intent(); 6