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 相关文章推荐
第一节--面向对象编程
Nov 16 PHP
加强版phplib的DB类
Mar 31 PHP
批量获取memcache值并按key的顺序返回的实现代码
Jun 14 PHP
php 文件缓存函数
Oct 08 PHP
PHP中设置时区方法小结
Jun 03 PHP
PHP按行读取文件时删除换行符的3种方法
May 04 PHP
PHP实现的简单缓存类
Jul 29 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
Dec 12 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
实例介绍PHP删除数组中的重复元素
Mar 03 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
May 12 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
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
2017/08/25 Javascript
JS实现颜色的10进制转化成rgba格式的方法
2017/09/04 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
python3.x上post发送json数据
2018/03/04 Python
对Python3中的input函数详解
2018/04/22 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
什么是Rollback Segment
2013/04/22 面试题
优秀求职信范文分享
2013/12/19 职场文书
红领巾心向党广播稿
2014/01/19 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
总经理任命书范本
2014/06/05 职场文书
学术研讨会主持词
2015/07/04 职场文书
学生会任命书范本
2015/09/21 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python
vue打包时去掉所有的console.log
2022/04/10 Vue.js