zl程序教程

您现在的位置是:首页 >  后端

当前栏目

PHP实现取得HTTP请求的原文

PHPHTTP 实现 请求 取得 原文
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程序设计有一定的帮助作用。