Мне нужен PHP-код, который делает дамп всей информации в HTTP-запросе, включая заголовки и содержимое любой информации, включенной в запрос POST. В принципе, диагностический инструмент, который выплескивает именно то, что я отправляю на сервер.
У кого-нибудь есть код, который это делает?
И, наконец:
print_r($_REQUEST);
Это касается большинства входящих элементов: PHP.net Manual: $ _REQUEST
Простым способом было бы:
<?php print_r($_SERVER); print_r($_POST); print_r($_GET); print_r($_FILES); ?>
Требуется немного массирования, чтобы получить все в том порядке, в котором вы хотите, и исключить переменные, которые вам не интересны, но вы должны начать.
Ну, вы можете прочитать все тело POST, как это
echo file_get_contents( 'php://input' );
И, предполагая, что ваш веб-сервер Apache, вы можете читать заголовки запросов так
$requestHeaders = apache_request_headers();
Никто не упоминал, как правильно сбрасывать заголовки 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
Объединив ответы от Питера Бейли и 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.
Если вам нужны фактические заголовки HTTP (как запрос, так и ответ), дайте hurl.it попытку.
Вы можете использовать команду apache_request_headers()
PHP, чтобы получить заголовки запросов и apache_response_headers()
чтобы получить текущие заголовки ответов. Обратите внимание, что ответ может быть изменен позже в скрипте PHP, пока контент не был отправлен.
file_get_contents ('php: // input') не всегда будет работать.
У меня есть запрос с заголовками «content-length = 735», а «php: // input» – пустая строка. Это зависит от того, насколько хорош / действителен HTTP-запрос.
Кроме того, вы можете использовать get_headers () . это не зависит от apache ..
print_r(get_headers());