PHP实现取得HTTP请求的原文
2023-06-13 09:15:43 时间
本文实例讲述了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。
具体代码如下:
functionget_all_headers(){ $headers=array(); foreach($_SERVERas$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请求原文 *@returnstring */ functionget_http_raw(){ $raw=""; //(1)请求行 $raw.=$_SERVER["REQUEST_METHOD"]."".$_SERVER["REQUEST_URI"]."".$_SERVER["SERVER_PROTOCOL"]."\r\n"; //(2)请求Headers foreach($_SERVERas$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数组拼接
- PHP之旅---出发(php+apache+MySQL)
- 环境管理 Linux下如何实现多版本PHP环境管理(linux多php版本)
- 安装Linux下的PHP环境(linux中安装php)
- PHP操作MySQL:实现数据库写入操作(php写入mysql)
- 测试Linux下PHP应用的实现(linux测试php)
- Linux下开发PHP项目的最佳选择:编辑器比较(linux下php编辑器)
- 使用PHP连接Linux,轻松实现物联网设备管理。(php连接linux)
- PHP与MSSQL:高效开发数据驱动应用程序(php与mssql)
- PHP中的Redis类:快速高效地管理数据(redis类php)
- 深入浅出:Linux 架构学习 HTTP 协议(http协议linux)
- 坚持不懈:用PHP实现MSSQL数据库连接(php链接mssql函数)
- PHP实现从MSSQL中获取数据的技巧 (php返回mssql值)
- PHP连接MSSQL实现注册功能(php注册写入mssql)
- 使用PHP封装MSSQL管理数据库(php封装mssql)
- 基于 PHP 和 MSSQL 的连接类开发实战(php mssql连接类)
- PHP与MSSQL结合,实现灵活高效的程序开发(php mssql 程序)
- PHP脚本管理MSSQL数据库:优化时间精度(php mssql 时间)
- 使用PHP和MSSQL实现网站搭建(php mssql 搭建)
- 仅用PHP操作MSSQL,实现快速下载!(php mssql下载)
- PHP如何实现与MSSQL的连接(要php链接mssql)
- 检查PHP Redis环境实现快速可靠性服务(检查php redis)
- PHP与MySQL实现三表关联操作(mysql三表关联pHP)
- 使用Redis锁实现PHP程序的安全性(redis锁机制 php)
- 重新封装zend_soap实现http连接安全认证的php代码