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

u5rb5r59  于 2022-12-28  发布在  PHP
关注(0)|答案(9)|浏览(168)

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

j0pj023g

j0pj023g1#

最后:

print_r($_REQUEST);

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

amrnrhlw

amrnrhlw2#

您可以读取整个POST主体like so

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

并且,假设您的Web服务器是Apache,您可以读取请求头like so

$requestHeaders = apache_request_headers();
5sxhfpxr

5sxhfpxr3#

一个简单的方法是:

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

需要进行一些调整,以使所有内容按您希望的顺序排列,并排除您不感兴趣的变量,但这应该会给予您一个开始。

inkz8wg9

inkz8wg94#

没有人提到如何在任何情况下正确转储HTTP头。
根据CGI规范rfc 3875第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

x33g5p2x

x33g5p2x5#

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内置Web服务器一起工作,这是PHP的一个非常方便的特性。

ca1c2owp

ca1c2owp6#

如果您需要实际的HTTP头(请求和响应),请给予hurl.it
可以使用PHP命令apache_request_headers()获取请求头,使用apache_response_headers()获取当前响应头,注意,只要内容还没有提供,就可以稍后在PHP脚本中更改响应。

cgfeq70w

cgfeq70w7#

file_get_contents('php://input')并不总是有效。
我有一个请求,在头中content-length=735php://input是空字符串。所以取决于如何良好/有效的HTTP请求。

ldfqzlk8

ldfqzlk88#

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

print_r(get_headers());
eh57zj3b

eh57zj3b9#

这是我使用的:

foreach ($_SERVER as $key => $value) { error_log("$key: $value");   }

相关问题