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 相关文章推荐
php下使用以下代码连接并测试
Apr 09 PHP
解析php多线程下载远程多个文件
Jun 25 PHP
解析php session_set_save_handler 函数的用法(mysql)
Jun 29 PHP
解析php防止form重复提交的方法
Jul 01 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
Aug 09 PHP
PHP 实现类似js中alert() 提示框
Mar 18 PHP
ThinkPHP项目分组配置方法分析
Mar 23 PHP
PHP中的use关键字及文件的加载详解
Nov 28 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
Mar 12 PHP
php xhprof使用实例详解
Apr 15 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
Sep 17 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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
jquery创建div 实现代码
2009/04/27 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
jquery高效反选具体实现
2013/05/05 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
基于jQuery实现滚动刷新效果
2017/01/09 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
JavaScript 实现继承的几种方式
2021/02/19 Javascript
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
python list元素为tuple时的排序方法
2018/04/18 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
使用Python的turtle模块画国旗
2019/09/24 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
俄语地区最大的中国商品在线购物网站之一:Umka Mall
2019/11/03 全球购物
测控技术与仪器个人求职信范文
2013/12/30 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
竞争上岗实施方案
2014/03/21 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
党员干部公开承诺书
2014/03/26 职场文书
生产助理岗位职责
2014/06/18 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
2015年三万活动总结
2015/03/25 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书