2010-06-28 4 views
36

Ich brauche PHP-Code, der einen Dump aller Informationen in einer HTTP-Anfrage, einschließlich der Header und der Inhalt aller Informationen in einer POST-Anfrage. Im Grunde ein Diagnose-Tool, das genau ausspuckt, was ich an einen Server sende.Wie alle Informationen von einer HTTP-Anfrage auf den Bildschirm zu drucken, in PHP

Hat jemand Code, der das tut?

+4

var_dump ($ _ HTTP_REQUEST); ? – Prix

+2

Heutzutage können Sie in Chrome und Firefox den Netzwerkverkehr (einschließlich der Header für Anfragen und Antworten) in den In-Browser-Entwicklungstools (https://developer.chrome.com/devtools/docs/network#http-headers) problemlos anzeigen. . Keine Notwendigkeit, manuell mit dem Drucken von Headern in PHP zu experimentieren. – dimo414

Antwort

17

wäre ein einfacher Weg sein:

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

Ein bisschen Massieren alles in der Reihenfolge der Variablen in Sie sind nicht daran interessiert ausschließen erforderlich wäre, um zu bekommen, und zu wollen, aber Sie sollten einen Anfang geben .

15

Nun können Sie die Gesamtheit des Körpers POST lesen like so

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

Und ist Ihr Webserver unter der Annahme, Apache, können Sie den Request-Header lesen like so

$requestHeaders = apache_request_headers(); 
+1

Beste Antwort bisher – rikpg

+0

Beste unter allen (y) –

0

zusätzlich können Sie Verwenden Sie get_headers(). es hängt nicht von Apache ..

print_r(get_headers()); 
+3

get_headers() ist für das Abrufen der Header einer anderen URL, nicht für die aktuelle Anfrage. – turibe

3

Wenn Sie aktuelle HTTP-Header (beide Anfrage und Antwort) wollen, geben hurl.it ein Versuch.

Sie können den PHP-Befehl apache_request_headers() verwenden, um die Anforderungsheader abzurufen, und apache_response_headers(), um die aktuellen Antwortheader abzurufen. Beachten Sie, dass die Antwort später im PHP-Skript geändert werden kann, solange der Inhalt nicht geliefert wurde.

+0

Diese SO-Antwort hat eine Liste von Tools wie hurl.it: http://stackoverflow.com/a/12637452/363573 – Stephan

7

Niemand erwähnte, wie man HTTP-Header unter keinen Umständen korrekt ablegt.

Von CGI-Spezifikation rfc3875, Abschnitt 4.1.18:

Meta-Variablen mit Namen beginnend mit "HTTP_" enthalten Werte von den Client-Request-Header zu lesen, wenn das verwendete Protokoll HTTP ist. Der Name des HTTP-Headerfelds wird in Großbuchstaben konvertiert, alle Vorkommen von "-" werden durch "" ersetzt und "HTTP" vorangestellt, um den Meta-Variablennamen zu geben.

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

Details: http://cmyker.blogspot.com/2012/10/how-to-dump-http-headers-with-php.html

+1

Interessieren Sie sich für einen Kommentar, warum schlagen Sie das vor? Vielleicht etwas Code von dir hinzufügen? Der Link verweist auf "HTTP-Anfrage-Header mit PHP unter CGI/FastCGI SAPI ablegen". Sind Sie sicher, dass das OP nach CGI/FastCGI SAPI gefragt hat? – Yaroslav

+1

Weil niemand richtig vorgeschlagen hat, HTTP-Header mit PHP zu dumpen. – Cmyker

+1

Ich musste HTTP-Header in meinem Skript speichern. Ich habe dieses Thema gelesen, aber keine der obigen Antworten war hilfreich und ich fand selbst eine Lösung. Jetzt teile ich diese Informationen mit anderen Leuten. Was ist los mit dir? – Cmyker

4

Die Zusammen Antworten von Peter Bailey und Cmyker Sie bekommen so etwas wie:

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

, die mit dem php -S integrierten Webserver arbeitet, die ein handliches recht ist Feature von PHP.

1

file_get_contents ('php: // input') wird nicht immer funktionieren.

Ich habe eine Anfrage mit in den Headern "content-length = 735" und "php: // input" ist eine leere Zeichenfolge. Also hängt es davon ab, wie gut/gültig die HTTP-Anfrage ist.

+0

Ich habe das gleiche Problem bei der Verwendung von POSTMAN, so für reguläre Anfrage verwende ich einfach $ _REQUEST oder $ _POST/$ _ GET ... –

Verwandte Themen