PHP实现取得HTTP请求的原文

 更新时间:2014年08月18日 10:33:28   投稿:shichen2014  
这篇文章主要介绍了PHP实现取得HTTP请求的原文,需要的朋友可以参考下

本文实例讲述了PHP实现取得HTTP请求的原文的方法,具体步骤如下:

1. 取得请求行:Method、URI、协议

可以从超级变量$_SERVER中获得,三个变量的值如下:

$_SERVER['REQUEST_METHOD'].' '.$_SERVER['REQUEST_URI'].' '.$_SERVER['SERVER_PROTOCOL']."\r\n"; 

2. 取得所有Header

PHP有个内置函数getallheader(),是apache_request_headers()函数的一个别名,可以将HTTP请求的所有Header以数组形式返回。但这个函数只能工作在Apache下,如果换了Nginx或者命令行,会直接报函数不存在的错误。

比较通用的方法是,从超级变量$_SERVER中提取出来,有关Header的键值都是“HTTP_”开头的,可以根据此特点取得所有的Header。

具体代码如下:

function get_all_headers() { 
$headers = array(); 

foreach($_SERVER as $key => $value) { 
if(substr($key, 0, 5) === 'HTTP_') { 
$key = substr($key, 5); 
$key = strtolower($key); 
$key = str_replace('_', ' ', $key); 
$key = ucwords($key); 
$key = str_replace(' ', '-', $key); 

$headers[$key] = $value; 
} 
} 

return $headers; 
} 

3. 取得Body

官方提供了一种获取请求Body的方法,即:

file_get_contents('php://input') 

4. 最终完整代码如下:

/** 
* 获取HTTP请求原文 
* @return string 
*/ 
function get_http_raw() { 
$raw = ''; 

// (1) 请求行 
$raw .= $_SERVER['REQUEST_METHOD'].' '.$_SERVER['REQUEST_URI'].' '.$_SERVER['SERVER_PROTOCOL']."\r\n"; 

// (2) 请求Headers 
foreach($_SERVER as $key => $value) { 
if(substr($key, 0, 5) === 'HTTP_') { 
$key = substr($key, 5); 
$key = str_replace('_', '-', $key); 

$raw .= $key.': '.$value."\r\n"; 
} 
} 

// (3) 空行 
$raw .= "\r\n"; 

// (4) 请求Body 
$raw .= file_get_contents('php://input'); 

return $raw; 
}

感兴趣的读者可以调试一下本文所述实例,以加深理解。相信对大家的PHP程序设计有一定的帮助作用。

相关文章

  • PHP中使用break跳出多重循环代码实例

    PHP中使用break跳出多重循环代码实例

    这篇文章主要介绍了PHP中使用break跳出多重循环代码实例,本文直接给出代码,代码简洁易一懂,一看就明白了,需要的朋友可以参考下
    2015-01-01
  • 学习php设计模式 php实现工厂模式(factory)

    学习php设计模式 php实现工厂模式(factory)

    这篇文章主要介绍了php设计模式中的工厂模式,使用php实现工厂模式,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 理解PHP中的stdClass类

    理解PHP中的stdClass类

    这篇文章主要介绍了PHP中的stdClass类,用白话介绍了stdClass类,需要的朋友可以参考下
    2014-04-04
  • php 文件上传类代码

    php 文件上传类代码

    php 文件上传类代码,学习php的朋友可以参考下。这段代码对上传的处理封装的不错,大家可以参考下。
    2011-08-08
  • PHP实现web socket长链接流程详解

    PHP实现web socket长链接流程详解

    这篇文章主要介绍了PHP实现web socket长链接流程,了解内部原理是为了帮助我们做扩展,同时也是验证了一个人的学习能力,如果你想让自己的职业道路更上一层楼,这些底层的东西你是必须要会的
    2023-03-03
  • PHP自定义错误用法示例

    PHP自定义错误用法示例

    这篇文章主要介绍了PHP自定义错误实现方法,可实现自由控制错误及提示内容的功能,涉及php使用自定义函数处理错误的相关操作技巧,需要的朋友可以参考下
    2016-09-09
  • PHP的Socket通信之UDP通信实例

    PHP的Socket通信之UDP通信实例

    这篇文章主要介绍了PHP的Socket通信之UDP通信方法,实例分析了php基于socket实现UDP通信的相关技巧,需要的朋友可以参考下
    2015-07-07
  • php计算指定目录下文件占用空间的方法

    php计算指定目录下文件占用空间的方法

    这篇文章主要介绍了php计算指定目录下文件占用空间的方法,实例分析了php操作目录及文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • php强制运行广告的方法

    php强制运行广告的方法

    这篇文章主要介绍了php强制运行广告的方法,通过session来实现记录访客访问次数进而调用弹窗广告来增加广告收入,是一个非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • php array_filter除去数组中的空字符元素

    php array_filter除去数组中的空字符元素

    php array_filter除去数组中的空字符元素,array_filter() 函数根据回调函数过滤数组中的值,省略回调函数则默认过滤空值,需要的朋友可以参考下。
    2011-11-11

最新评论