我需要一些PHP代码,它可以转储HTTP请求中的所有信息,包括POST请求中包含的任何信息的头和内容。基本上,它是一个诊断工具,可以准确地吐出我发送到服务器的内容。有人有这样的代码吗?
j0pj023g1#
最后:
print_r($_REQUEST);
这涵盖了大多数传入项目:PHP.net Manual: $_REQUEST
amrnrhlw2#
您可以读取整个POST主体like so
echo file_get_contents( 'php://input' );
并且,假设您的Web服务器是Apache,您可以读取请求头like so
$requestHeaders = apache_request_headers();
5sxhfpxr3#
一个简单的方法是:
<?php print_r($_SERVER); print_r($_POST); print_r($_GET); print_r($_FILES); ?>
需要进行一些调整,以使所有内容按您希望的顺序排列,并排除您不感兴趣的变量,但这应该会给予您一个开始。
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
x33g5p2x5#
将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的一个非常方便的特性。
php -S
ca1c2owp6#
如果您需要实际的HTTP头(请求和响应),请给予hurl.it。可以使用PHP命令apache_request_headers()获取请求头,使用apache_response_headers()获取当前响应头,注意,只要内容还没有提供,就可以稍后在PHP脚本中更改响应。
apache_request_headers()
apache_response_headers()
cgfeq70w7#
file_get_contents('php://input')并不总是有效。我有一个请求,在头中content-length=735和php://input是空字符串。所以取决于如何良好/有效的HTTP请求。
file_get_contents('php://input')
content-length=735
php://input
ldfqzlk88#
此外,您还可以使用get_headers(),它不依赖于Apache。
print_r(get_headers());
eh57zj3b9#
这是我使用的:
foreach ($_SERVER as $key => $value) { error_log("$key: $value"); }
9条答案
按热度按时间j0pj023g1#
最后:
这涵盖了大多数传入项目:PHP.net Manual: $_REQUEST
amrnrhlw2#
您可以读取整个POST主体like so
并且,假设您的Web服务器是Apache,您可以读取请求头like so
5sxhfpxr3#
一个简单的方法是:
需要进行一些调整,以使所有内容按您希望的顺序排列,并排除您不感兴趣的变量,但这应该会给予您一个开始。
inkz8wg94#
没有人提到如何在任何情况下正确转储HTTP头。
根据CGI规范rfc 3875第4.1.18节:
如果使用的协议是HTTP,则名称以“HTTP_”开头的元变量包含从客户机请求标头字段读取的值。HTTP标头字段名称将转换为大写,所有出现的“-”都将替换为“”,并在前面加上“HTTP”以给予元变量名称。
详细信息:http://cmyker.blogspot.com/2012/10/how-to-dump-http-headers-with-php.html
x33g5p2x5#
将Peter Bailey和Cmyker的答案放在一起,您会得到如下结果:
它与
php -S
内置Web服务器一起工作,这是PHP的一个非常方便的特性。ca1c2owp6#
如果您需要实际的HTTP头(请求和响应),请给予hurl.it。
可以使用PHP命令
apache_request_headers()
获取请求头,使用apache_response_headers()
获取当前响应头,注意,只要内容还没有提供,就可以稍后在PHP脚本中更改响应。cgfeq70w7#
file_get_contents('php://input')
并不总是有效。我有一个请求,在头中
content-length=735
和php://input
是空字符串。所以取决于如何良好/有效的HTTP请求。ldfqzlk88#
此外,您还可以使用get_headers(),它不依赖于Apache。
eh57zj3b9#
这是我使用的: