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

Spi*_*ams 49 php http

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

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

Mar*_*ppi 45

最后:

print_r($_REQUEST);
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为操作员想要 HEADERS。这,根据文档是`关联数组,默认情况下包含 $_GET、$_POST 和 $_COOKIE` 的内容。所以对于一个简单的“GET”请求,它是空的。 (2认同)

Vin*_*vic 27

一个简单的方法是:

<?php
print_r($_SERVER);
print_r($_POST);
print_r($_GET);
print_r($_FILES);
?>
Run Code Online (Sandbox Code Playgroud)

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


Pet*_*ley 24

好吧,你可以像这样阅读整个POST主体

echo file_get_contents( 'php://input' );
Run Code Online (Sandbox Code Playgroud)

并且,假设您的Web服务器是Apache,您可以像这样读取请求标头

$requestHeaders = apache_request_headers();
Run Code Online (Sandbox Code Playgroud)

  • 到目前为止最佳答案 (2认同)

Cmy*_*ker 11

没有人提到在任何情况下如何正确转储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>';
    }
}
Run Code Online (Sandbox Code Playgroud)

详细信息:http://cmyker.blogspot.com/2012/10/how-to-dump-http-headers-with-php.html

  • 因为没有人正确地建议如何使用PHP转储HTTP标头. (2认同)
  • 我需要在我的脚本中转储http标头.我读了这个主题,但上面的答案都没有用,我自己找到了解决方案.现在我正在向其他人分享这些信息.怎么了? (2认同)

lda*_*v1s 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");
}
?>
Run Code Online (Sandbox Code Playgroud)

它与php -S内置的webserver一起使用,这是PHP的一个非常方便的功能.