如何在PHP中将所有来自HTTP请求的信息打印到屏幕上
我需要一些PHP代码来转储HTTP请求中的所有信息,包括标题和POST请求中包含的任何信息的内容。 基本上,一个诊断工具,吐出正是我发送到服务器。
有没有人有这样的代码?
最后:
print_r($_REQUEST);
这涵盖了大多数传入的项目: PHP.net手册:$ _REQUEST
一个简单的方法是:
<?php print_r($_SERVER); print_r($_POST); print_r($_GET); print_r($_FILES); ?>
需要按摩一下,按照你想要的顺序把所有东西都按顺序排除,排除你不感兴趣的variables,但是应该给你一个开始。
那么,你可以像这样读取整个POST主体
echo file_get_contents( 'php://input' );
而且,假设您的networking服务器是Apache,您可以像这样读取请求标头
$requestHeaders = apache_request_headers();
没有人提到如何在任何情况下正确转储HTTP标头。
从CGI规范rfc3875,第4.1.18节:
如果使用的协议是HTTP,名称以“HTTP_”开头的元variables包含从客户端请求头字段中读取的值。 HTTP标题字段名称被转换为大写,所有出现的“ – ”replace为“ ”,并且前缀“HTTP ”以给出元variables名称。
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 -S
内置的web服务器一起工作,这是PHP的一个非常方便的function。
如果你想要实际的HTTP头(请求和响应), 请尝试hurl.it。
您可以使用PHP命令apache_request_headers()
来获取请求标头,并使用apache_response_headers()
获取当前的响应标头。 请注意,只要未提供内容,可以稍后在PHP脚本中更改响应。
file_get_contents('php:// input')不会总是工作。
我有一个请求在标题“content-length = 735”和“php:// input”是空string。 所以取决于HTTP请求的有效性。
另外,你可以使用get_headers() 。 它不依赖于Apache ..
print_r(get_headers());