Php print get request

magnetikonline / dumprequest.php

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

// https://gist.github.com/magnetikonline/650e30e485c0f91f2f40
class DumpHTTPRequestToFile
public function execute ( $ targetFile )
$ data = sprintf(
» %s %s %s \n\n HTTP headers: \n»,
$ _SERVER [ ‘REQUEST_METHOD’ ],
$ _SERVER [ ‘REQUEST_URI’ ],
$ _SERVER [ ‘SERVER_PROTOCOL’ ]
);
foreach ( $ this -> getHeaderList () as $ name => $ value )
$ data .= $ name . ‘: ‘ . $ value . «\n»;
>
$ data .= «\n Request body: \n»;
file_put_contents(
$ targetFile ,
$ data . file_get_contents( ‘php://input’ ) . «\n»
);
echo (» Done! \n\n»);
>
private function getHeaderList ()
$ headerList = [];
foreach ( $ _SERVER as $ name => $ value )
if (preg_match( ‘/^HTTP_/’ , $ name ))
// convert HTTP_HEADER_NAME to Header-Name
$ name = strtr(substr( $ name , 5 ), ‘_’ , ‘ ‘ );
$ name = ucwords(strtolower( $ name ));
$ name = strtr( $ name , ‘ ‘ , ‘-‘ );
// add to list
$ headerList [ $ name ] = $ value ;
>
>
return $ headerList ;
>
>
( new DumpHTTPRequestToFile )-> execute ( ‘./dumprequest.txt’ );

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

GET /dumprequest.php HTTP/1.1
HTTP headers:
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Accept-Encoding: gzip, deflate, br
Referer: http://localhost/
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36
Upgrade-Insecure-Requests: 1
Connection: keep-alive
Host: localhost
Request body:

Hey ! Thanks for this helpfull script !
My suggestions :

  • remove ‘echo(«Done!\n\n»);’ : user of this script should be able to have control of what is written to the request output
  • change $data .= «\nResponse body:\n»; to $data .= «\nRequest body:\n»; ? Since what you dump is the body of the actual request, not the response

@beebopfr Request body of course 👍 Thanks!

It’s a very useful script would be useful if it can dump
$_GET
data as well and also list
$_SERVER[‘REMOTE_ADDR’]

hi ,
am how to use this script to get the response .

To add every new register instead of replacing the previous one, you must use FILE_APPEND with file_get_content.
$data . file_get_contents(‘php://input’) . «\n*************************************************************\n», FILE_APPEND
Thank you.

Use this line to get GET/POST data

add this line at the end to create a file for each request with timestamp

$date = new DateTime();
rename(«dumprequest.txt», «dumprequest» . $date->format(‘Y-m-d H:i:sP’) . «.txt»);

This doesn’t need to be a class, could be a easy to use library function.

Hey! thanks for this script.

I’m a complete newbie and maybe I can not even explain myself. However what I need is to save data coming from an http request to my server on a file. Thus it seems that the above script is perfect for my needs.
What I do not understand is where to put the script and how let it works: should I put the script on my server and use is URL in the http request to let him works and create the file?

For the next time I come across this- Single function version.

@jotham thanks for summarizing it

Simple, but useful snippet. 🙂

Yeah I also find that FILE_APPEND would be great so you can tail -f the log file and it does not get overwritten all the time. Apart from that, useful PHP snippet ;). THX

My edit to dump request to server log via php -S localhost:62000 .

 $time = time(); error_log("--------------------[START/" . $time . "]--------------------"); error_log(""); error_log(sprintf("%s %s %s", $_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI'], $_SERVER['SERVER_PROTOCOL'])); error_log(""); error_log(""); foreach ($_SERVER as $headerName => $headerValue) < if (preg_match('/^HTTP_/', $headerName)) < // convert HTTP_HEADER_NAME to Header-Name $headerName = strtr(substr($headerName, 5), '_', ' '); $headerName = ucwords(strtolower($headerName)); $headerName = strtr($headerName, ' ', '-'); error_log("$headerName: $headerValue"); > > error_log(""); $body = file_get_contents('php://input'); $bodyLength = strlen($body); error_log(""); error_log($bodyLength ? $body : "(empty body)"); error_log(""); error_log("---------------------[END/" . $time . "]---------------------");
[Wed Dec 15 13:45:00 2021] 127.0.0.1:40922 Accepted [Wed Dec 15 13:45:00 2021] --------------------[START/1639568700]-------------------- [Wed Dec 15 13:45:00 2021] [Wed Dec 15 13:45:00 2021] POST / HTTP/1.0 [Wed Dec 15 13:45:00 2021] [Wed Dec 15 13:45:00 2021] [Wed Dec 15 13:45:00 2021] X-Real-Ip: 127.0.0.1 [Wed Dec 15 13:45:00 2021] X-Forwarded-For: 127.0.0.1 [Wed Dec 15 13:45:00 2021] Host: 127.0.0.1 [Wed Dec 15 13:45:00 2021] Connection: close [Wed Dec 15 13:45:00 2021] Content-Length: 11 [Wed Dec 15 13:45:00 2021] User-Agent: HTTPie/1.0.3 [Wed Dec 15 13:45:00 2021] Accept-Encoding: gzip, deflate [Wed Dec 15 13:45:00 2021] Accept: */* [Wed Dec 15 13:45:00 2021] Content-Type: application/x-www-form-urlencoded; charset=utf-8 [Wed Dec 15 13:45:00 2021] [Wed Dec 15 13:45:00 2021] [Wed Dec 15 13:45:00 2021] hello=world [Wed Dec 15 13:45:00 2021] [Wed Dec 15 13:45:00 2021] ---------------------[END/1639568700]--------------------- [Wed Dec 15 13:45:00 2021] 127.0.0.1:40922 [200]: POST / [Wed Dec 15 13:45:00 2021] 127.0.0.1:40922 Closing 

Источник

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

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

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

Это касается большинства входящих элементов: PHP.net Manual: $ _REQUEST

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

Ну, вы можете прочитать все тело 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.'
'; > >

Объединив ответы от Питера Бейли и Cmyker, вы получите что-то вроде:

 $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 ..

Источник

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

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

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

В настоящее время и Chrome, и Firefox позволяют легко просматривать сетевой трафик (включая заголовки запросов и ответов) в их браузере инструменты разработчика. Не нужно возиться с печатью заголовков вручную в PHP.

@ dimo414, бывают случаи, когда то, что доходит до сервера, отличается от того, что отправляет браузер, например когда соединение идет через прокси или CDN .

9 ответов

Это охватывает большинство входящих элементов: Руководство по PHP.net: $ _REQUEST

Я думаю, оператору нужны ЗАГОЛОВКИ. Согласно документу, это associative array that by default contains the contents of $_GET, $_POST and $_COOKIE . Так что для простого запроса GET он пуст.

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

Заголовки находятся в $_SERVER . Простой красивый шрифт: foreach($_SERVER as $key => $val) echo($key . «=>» . $val . «
«; .

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

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

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

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

У меня такая же проблема при использовании POSTMAN, поэтому для обычного запроса я просто использую $ _REQUEST или $ _POST / $ _ GET .

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

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

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

$requestHeaders = apache_request_headers(); 

apache_request_headers() , работает также для встроенного сервера Php. Несмотря на название. У него есть псевдоним getallheaders()

Никто не упомянул, как правильно сбрасывать 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.'
'; > >

Прокомментируйте, почему вы это предлагаете? Может быть, добавить код от себя? Ссылка перенаправляет на «Как сбросить заголовки HTTP-запросов с помощью PHP под CGI / FastCGI SAPI», вы уверены, что OP запрашивал CGI / FastCGI SAPI?

Источник

Читайте также:  Html colors names and code
Оцените статью