php获取请求body,PHP取得HTTP请求的原文

PHP取得HTTP请求的原文

文章作者:网友投稿 发布时间:2011-06-01 11:35:38 来源:网络

1. 取得请求行:Method、URI、协议 可以从超级变量$_SERVER中获得,三个变量的值如下: $_SERVER['REQUEST_METHOD'].' '.$_SERVER['REQUEST_URI'].' '.$_SERVER['SERVER_PROTOCOL'].\

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值