我需要一些PHP代码来转储HTTP请求中的所有信息,包括标头和POST请求中包含的任何信息的内容.基本上,一个诊断工具可以准确地发出我发送给服务器的内容.
有没有人有一些代码可以做到这一点?
Mar*_*ppi 45
最后:
print_r($_REQUEST);
Run Code Online (Sandbox Code Playgroud)
这涵盖了大多数传入的项目:PHP.net手册:$ _REQUEST
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)
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
汇总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");
}
?>
Run Code Online (Sandbox Code Playgroud)
它与php -S内置的webserver一起使用,这是PHP的一个非常方便的功能.