我需要一些PHP代码,能够转储HTTP请求中的所有信息,包括标头和POST请求中包含的任何信息的内容。基本上,这是一个诊断工具,可以输出我发送到服务器的内容。
请问有没有人有能够实现这个功能的代码?
我需要一些PHP代码,能够转储HTTP请求中的所有信息,包括标头和POST请求中包含的任何信息的内容。基本上,这是一个诊断工具,可以输出我发送到服务器的内容。
请问有没有人有能够实现这个功能的代码?
一个简单的方法是:
<?php
print_r($_SERVER);
print_r($_POST);
print_r($_GET);
print_r($_FILES);
?>
需要进行一些调整才能按照您想要的顺序排列所有内容,并排除您不感兴趣的变量,但这应该可以帮助您入门。
$_SERVER
中。基本的漂亮打印方式为:foreach($_SERVER as $key => $val) echo($key . "=>" . $val . "<br/>";
。 - Skippy le Grand Gourou在任何情况下,没有人提到如何正确地转储HTTP标头。
根据CGI规范rfc3875的第4.1.18节:
以“HTTP_”开头的元变量包含从客户端请求头字段中读取的值(如果使用的协议是HTTP)。 HTTP标头字段名称会被转换为大写字母,并将所有“-”替换为“”,然后以“HTTP”作为前缀来生成元变量名称。
foreach ($_SERVER as $key => $value) {
if (strpos($key, 'HTTP_') === 0) {
$chunks = explode('_', $key);
$header = '';
for ($i = 1; $y = sizeof($chunks) - 1, $i < $y; $i++) {
$header .= ucfirst(strtolower($chunks[$i])).'-';
}
$header .= ucfirst(strtolower($chunks[$i])).': '.$value;
echo $header.'<br>';
}
}
细节: http://cmyker.blogspot.com/2012/10/how-to-dump-http-headers-with-php.html
结合来自Peter Bailey和Cmyker的答案,您可以得到类似以下的内容:
<?php
foreach ($_SERVER as $key => $value) {
if (strpos($key, 'HTTP_') === 0) {
$chunks = explode('_', $key);
$header = '';
for ($i = 1; $y = sizeof($chunks) - 1, $i < $y; $i++) {
$header .= ucfirst(strtolower($chunks[$i])).'-';
}
$header .= ucfirst(strtolower($chunks[$i])).': '.$value;
echo $header."\n";
}
}
$body = file_get_contents('php://input');
if ($body != '') {
print("\n$body\n\n");
}
?>
这个功能可以与PHP内置的php -S
web服务器一起使用,这是PHP相当方便的一个功能。
apache_request_headers()
获取请求头,并使用apache_response_headers()
获取当前响应头。请注意,只要内容未被服务,响应就可以在PHP脚本中稍后更改。file_get_contents('php://input')
并不总是有效。
我收到的请求头中有content-length=735
,但php://input
是空字符串。这取决于HTTP请求的质量/有效性。
另外,您可以使用get_headers()。 它不依赖于apache。
print_r(get_headers());