Подтвердить что ты не робот

Как распечатать всю информацию из HTTP-запроса на экране, в PHP

Мне нужен код PHP, который делает дамп всей информации в HTTP-запросе, включая заголовки и содержимое любой информации, включенной в запрос POST. В принципе, диагностический инструмент, который выплескивает именно то, что я отправляю на сервер.

Есть ли у кого-нибудь код, который делает это?

4b9b3361

Ответ 2

Простым способом было бы:

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

Вам потребуется немного массирования, чтобы получить все в том порядке, в котором вы хотите, и исключить переменные, которые вам не интересны, но должны дать вам начало.

Ответ 3

Хорошо, вы можете прочитать полностью тело POST так

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

И, если ваш веб-сервер - это Apache, вы можете прочитать заголовки запросов так

$requestHeaders = apache_request_headers();

Ответ 4

Никто не упоминал, как правильно удалять заголовки 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

Ответ 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.

Ответ 6

Если вам нужны фактические заголовки HTTP (как запрос, так и ответ), попробуйте hurl.it.

Вы можете использовать команду PHP apache_request_headers(), чтобы получить заголовки запроса и apache_response_headers(), чтобы получить текущие заголовки ответов. Обратите внимание, что ответ может быть изменен позже в PHP script, пока контент не был отправлен.

Ответ 7

file_get_contents ('php://input') не всегда будет работать.

У меня есть запрос с заголовками "content-length = 735", а "php://input" - пустая строка. Это зависит от того, насколько хорош/действителен HTTP-запрос.

Ответ 8

Кроме того, вы можете использовать get_headers(). это не зависит от apache..

print_r(get_headers());