如何在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());