PHP实现取得HTTP请求的原文


Posted in PHP onAugust 18, 2014

本文实例讲述了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 相关文章推荐
在Zeus Web Server中安装PHP语言支持
Oct 09 PHP
十天学会php之第一天
Oct 09 PHP
php5编程中的异常处理详细方法介绍
Jul 29 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 PHP
简单的php中文转拼音的实现代码
Feb 11 PHP
ThinkPHP中自定义目录结构的设置方法
Aug 15 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
PHP中配置IIS7实现基本身份验证的方法
Sep 24 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
Aug 18 #PHP
PHP中使用asort进行中文排序失效的问题处理
Aug 18 #PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
Aug 18 #PHP
PHP命名空间(namespace)的动态访问及使用技巧
Aug 18 #PHP
PHP命名空间(namespace)的使用基础及示例
Aug 18 #PHP
mac环境中使用brew安装php5.5.15
Aug 18 #PHP
PHP 正则表达式常用函数
Aug 17 #PHP
You might like
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
javascript中Function类型详解
2015/04/28 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
JavaScript实现身份证验证代码实例
2019/08/26 Javascript
JS常见内存泄漏及解决方案解析
2020/05/30 Javascript
基于Python的身份证号码自动生成程序
2014/08/15 Python
Python实现的随机森林算法与简单总结
2018/01/30 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
2018/10/11 Python
python实现银行管理系统
2019/10/25 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
速比涛英国官网:Speedo英国
2019/07/15 全球购物
新闻专业个人求职信
2013/12/19 职场文书
全神贯注教学反思
2014/02/03 职场文书
本科毕业生求职自荐信
2014/04/09 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
计划生育诚信协议书
2014/11/02 职场文书
申报优秀教师材料
2014/12/16 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
七年级作文之冬景
2019/11/07 职场文书
python执行js代码的方法
2021/05/13 Python
用python批量解压带密码的压缩包
2021/05/31 Python
keepalived + nginx 实现高可用方案
2022/12/24 Servers