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+Html+缓存
Nov 25 PHP
PHP中调用ASP.NET的WebService的代码
Apr 22 PHP
关于crontab的使用详解
Jun 24 PHP
PHP获取QQ达人QQ信息的方法
Mar 05 PHP
php单链表实现代码分享
Jul 04 PHP
[原创]smarty简单模板变量输出方法
Jul 09 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
Apr 01 PHP
PHP中quotemeta()函数的用法讲解
Apr 04 PHP
PHP7 mongoDB扩展使用的方法分享
May 02 PHP
PHP goto语句用法实例
Aug 06 PHP
PHP dirname功能及原理实例解析
Oct 28 PHP
PHP实现两种排课方式
Jun 26 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中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
几种有用的变型 PHP中循环语句的用法介绍
2012/01/30 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
JavaScript函数详解
2014/11/17 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
Vue响应式原理详解
2017/04/18 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
javascript之分片上传,断点续传的实际项目实现详解
2019/09/05 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
Python中删除文件的程序代码
2011/03/13 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
Tostadora意大利:定制T恤
2019/04/08 全球购物
行政助理岗位职责范文
2013/12/03 职场文书
卖车协议书范例
2014/09/16 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
业务员岗位职责范本
2015/04/03 职场文书
投诉信范文
2015/07/02 职场文书
感恩主题班会教案
2015/08/12 职场文书
Python基于百度AI实现抓取表情包
2021/06/27 Python
Oracle删除归档日志及添加定时任务
2022/06/28 Oracle