我需要一些PHP代码来转储HTTP请求中的所有信息,包括标头和POST请求中包含的任何信息的内容。基本上,一个诊断工具可以准确地发出我发送给服务器的内容。
有没有人有一些代码可以做到这一点?
答案 0 :(得分:42)
答案 1 :(得分:26)
一种简单的方法是:
<?php
print_r($_SERVER);
print_r($_POST);
print_r($_GET);
print_r($_FILES);
?>
需要进行一些按摩,以便按照您想要的顺序获取所有内容,并排除您不感兴趣的变量,但应该给您一个开始。
答案 2 :(得分:22)
好吧,你可以阅读整个POST正文like so
echo file_get_contents( 'php://input' );
并且,假设您的网络服务器是Apache,您可以阅读请求标头like so
$requestHeaders = apache_request_headers();
答案 3 :(得分:10)
没有人提到在任何情况下如何正确转储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>';
}
}
详细信息:http://cmyker.blogspot.com/2012/10/how-to-dump-http-headers-with-php.html
答案 4 :(得分:5)
汇总来自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
内置网络服务器,这是PHP的一个非常方便的功能。
答案 5 :(得分:3)
如果您需要实际的HTTP标头(请求和响应),请尝试hurl.it。
您可以使用PHP命令apache_request_headers()
获取请求标头,使用apache_response_headers()
获取当前响应标头。请注意,只要内容尚未提供,就可以稍后在PHP脚本中更改响应。
答案 6 :(得分:1)
file_get_contents('php:// input')并不总是有效。
我在标题“content-length = 735”中有一个请求,而“php:// input”是空字符串。所以取决于HTTP请求的好/有效程度。
答案 7 :(得分:0)
此外,您可以使用get_headers()。它不依赖于apache ..
print_r(get_headers());
答案 8 :(得分:0)
问题是,我在URL中写了http://my_domain而不是https://my_domain