代码之家  ›  专栏  ›  技术社区  ›  Spike Williams

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

  •  40
  • Spike Williams  · 技术社区  · 16 年前

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

    有人有这样做的代码吗?

    8 回复  |  直到 9 年前
        1
  •  41
  •   Marco Ceppi    16 年前

    最后:

    print_r($_REQUEST);
    

    PHP.net Manual: $_REQUEST

        2
  •  24
  •   Vinko Vrsalovic    16 年前

    一个简单的方法是:

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

    你需要做一点按摩,让一切都按你想要的顺序进行,排除你不感兴趣的变量,但是应该给你一个开始。

        3
  •  20
  •   Peter Bailey    16 年前

    Well, you can read the entirety of the POST body like so

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

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

    $requestHeaders = apache_request_headers();
    
        4
  •  10
  •   Cmyker    9 年前

    根据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

        5
  •  5
  •   Community Mohan Dere    9 年前

    整理答案 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的一个非常方便的特性。

        6
  •  3
  •   matpie    16 年前

    如果需要实际的HTTP头(请求和响应),请给出 hurl.it 尝试一下。

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

        7
  •  1
  •   Roger Getnoticed    10 年前

    文件“获取”内容(“php://input”)并不总是有效。

    I have a request with in the headers "content-length=735" and "php://input" is empty string. So depends on how good/valid the HTTP request is.

        8
  •  0
  •   Sergey Eremin    16 年前

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

    print_r(get_headers());
    
    推荐文章