如何在PHP中将HTTP请求中的所有信息打印到屏幕上

时间:2010-06-28 21:25:05

标签: php http

我需要一些PHP代码来转储HTTP请求中的所有信息,包括标头和POST请求中包含的任何信息的内容。基本上,一个诊断工具可以准确地发出我发送给服务器的内容。

有没有人有一些代码可以做到这一点?

9 个答案:

答案 0 :(得分:42)

最后:

print_r($_REQUEST);

这涵盖了大多数传入的项目:PHP.net Manual: $_REQUEST

答案 1 :(得分:26)

一种简单的方法是:

<?php
print_r($_SERVER);
print_r($_POST);
print_r($_GET);
print_r($_FILES);
?>

需要进行一些按摩,以便按照您想要的顺序获取所有内容,并排除您不感兴趣的变量,但应该给您一个开始。

答案 2 :(得分:22)

好吧,你可以阅读整个POST正文like so

echo file_get_contents( 'php://input' );

并且,假设您的网络服务器是Apache,您可以阅读请求标头like so

$requestHeaders = apache_request_headers();

答案 3 :(得分:10)

没有人提到在任何情况下如何正确转储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

答案 4 :(得分:5)

汇总来自Peter BaileyCmyker的答案,您会得到类似的内容:

<?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内置网络服务器,这是PHP的一个非常方便的功能。

答案 5 :(得分:3)

如果您需要实际的HTTP标头(请求和响应),请尝试hurl.it

您可以使用PHP命令apache_request_headers()获取请求标头,使用apache_response_headers()获取当前响应标头。请注意,只要内容尚未提供,就可以稍后在PHP脚本中更改响应。

答案 6 :(得分:1)

file_get_contents('php:// input')并不总是有效。

我在标题“content-length = 735”中有一个请求,而“php:// input”是空字符串。所以取决于HTTP请求的好/有效程度。

答案 7 :(得分:0)

此外,您可以使用get_headers()。它不依赖于apache ..

print_r(get_headers());

答案 8 :(得分:0)

问题是,我在URL中写了http://my_domain而不是https://my_domain