2010-06-28 5 views
36

Potrzebuję kodu PHP, który wykonuje zrzut wszystkich informacji w żądaniu HTTP, w tym nagłówków i zawartości wszelkich informacji zawartych w żądaniu POST. Zasadniczo narzędzie diagnostyczne, które wypluwa dokładnie to, co wysyłam na serwer.Jak wydrukować wszystkie informacje z żądania HTTP na ekranie, w PHP

Czy ktoś ma jakiś kod, który to robi?

+4

var_dump ($ _ HTTP_REQUEST); ? – Prix

+2

W dzisiejszych czasach zarówno Chrome, jak i Firefox umożliwiają łatwe przeglądanie ruchu sieciowego (w tym nagłówków żądań i odpowiedzi) w ich przeglądarce [narzędzia dla programistów] (https://developer.chrome.com/devtools/docs/network#http-headers) . Nie musisz ręcznie manipulować nagłówkami drukowania w PHP. – dimo414

Odpowiedz

17

Prostym sposobem byłoby:

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

Trochę masowania byłoby wymagane, aby wszystko w żądanej kolejności, i wykluczyć zmienne nie są zainteresowani, ale powinno dać początek .

15

Cóż, można przeczytać całość organizmu POST like so

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

I zakładając, że serwer WWW Apache, można odczytać nagłówków żądania like so

$requestHeaders = apache_request_headers(); 
+1

najlepsza odpowiedź do tej pory – rikpg

+0

najlepsza wśród wszystkich (y) –

0

Ponadto można użyj get_headers(). to nie zależy od apache ..

print_r(get_headers()); 
+3

get_headers() służy do pobierania nagłówków innego adresu URL, a nie do bieżącego żądania. – turibe

3

Jeśli chcesz rzeczywistych nagłówków HTTP (zarówno żądania i odpowiedzi), dają hurl.it spróbuj. Aby uzyskać bieżące nagłówki odpowiedzi, można użyć komendy PHP . Zauważ, że odpowiedź można zmienić później w skrypcie PHP, o ile zawartość nie została dostarczona.

+0

Ta odpowiedź zawiera listę narzędzi, takich jak hurl.it: http://stackoverflow.com/a/12637452/363573 – Stephan

7

Nikt nie wspomniał, jak zrzucić wszystkie nagłówki HTTP poprawnie w każdych okolicznościach.

Od CGI specyfikacji rfc3875, sekcja 4.1.18:

meta-zmiennych o nazwach rozpoczynających się od „HTTP_” zawierają wartości odczytu z pól nagłówka żądania klienta, jeżeli używany jest protokół HTTP. Nazwa pola nagłówka HTTP jest konwertowana na wielkie litery, wszystkie wystąpienia są zastępowane przez "-" wartością "", a nazwa "HTTP" jest nadawana w celu nadania nazwy meta-zmiennej .

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>'; 
    } 
} 

Szczegóły: http://cmyker.blogspot.com/2012/10/how-to-dump-http-headers-with-php.html

+1

Troska o komentarz, dlaczego to proponujesz? Może dodałeś jakiś kod od siebie? Link przekierowuje do "Jak zrzucić nagłówki żądań HTTP za pomocą PHP w CGI/FastCGI SAPI", czy jesteś pewien, że OP poprosił o CGI/FastCGI SAPI? – Yaroslav

+1

Ponieważ nikt poprawnie nie sugerował, jak zrzucić nagłówki HTTP za pomocą PHP. – Cmyker

+1

Musiałem zrzucić nagłówki http w moim skrypcie. Przeczytałem ten temat, ale żadna z powyższych odpowiedzi nie była pomocna i sam znalazłem rozwiązanie. Teraz udostępniam te informacje innym osobom. Co jest nie tak? – Cmyker

4

łącząc odpowiedzi od Peter Bailey i Cmyker masz coś takiego:

<?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"); 
} 
?> 

który współpracuje z php -S wbudowany serwer WWW, który jest bardzo przydatny funkcja PHP.

1

file_get_contents ("php: // input") nie zawsze działa.

Mam żądanie w nagłówku "długość-treści = 735" i "php: // input" jest pustym ciągiem. Zależy więc od tego, jak dobre/poprawne jest żądanie HTTP.

+0

Mam ten sam problem podczas korzystania z POSTMAN, więc do regularnego żądania używam $ _REQUEST lub $ _POST/$ _ GET ... –

Powiązane problemy