2010-06-28 9 views
36

Ho bisogno di un codice PHP che faccia una copia di tutte le informazioni in una richiesta HTTP, comprese le intestazioni e il contenuto di qualsiasi informazione inclusa in una richiesta POST. Fondamentalmente, uno strumento diagnostico che sputa esattamente ciò che invio a un server.Come stampare tutte le informazioni da una richiesta HTTP sullo schermo, in PHP

Qualcuno ha un codice che lo fa?

+4

var_dump ($ _ HTTP_REQUEST); ? – Prix

+2

Oggigiorno sia Chrome che Firefox consentono di visualizzare facilmente il traffico di rete (comprese le intestazioni per richieste e risposte) nel proprio browser [strumenti per sviluppatori] (https://developer.chrome.com/devtools/docs/network#http-headers) . Non c'è bisogno di giocherellare manualmente con le intestazioni di stampa in PHP. – dimo414

risposta

17

Un modo semplice potrebbe essere:

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

Un po 'di massaggio sarebbe necessario per ottenere tutto nell'ordine desiderato e di escludere le variabili che non interessano, ma dovrebbe darvi un inizio .

15

Beh, si può leggere l'interezza del corpo POST like so

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

E, supponendo che il server web è Apache, è possibile leggere le intestazioni di richiesta like so

$requestHeaders = apache_request_headers(); 
+1

risposta migliore finora – rikpg

+0

il migliore tra tutti (y) –

0

in aggiunta, si può utilizzare get_headers(). essa non dipende da apache ..

print_r(get_headers()); 
+3

get_headers() serve per ottenere le intestazioni di un altro URL, non per la richiesta corrente. – turibe

3

Se vuoi intestazioni HTTP effettivi (sia di richiesta e risposta), dare hurl.it una prova.

È possibile utilizzare il comando PHP apache_request_headers() per ottenere le intestazioni della richiesta e apache_response_headers() per ottenere le intestazioni di risposta correnti. Si noti che la risposta può essere modificata in seguito nello script PHP purché il contenuto non sia stato pubblicato.

+0

Questa risposta SO ha una lista di strumenti come hurl.it: http://stackoverflow.com/a/12637452/363573 – Stephan

7

Nessuno ha menzionato come eseguire correttamente il dump delle intestazioni HTTP in nessuna circostanza.

Da CGI specifica rfc3875, sezione 4.1.18:

meta-variabili con nomi che iniziano con "HTTP_" contengono valori letti dai campi di intestazione richiesta del cliente, se il protocollo utilizzato è HTTP. Il nome del campo dell'intestazione HTTP viene convertito in maiuscolo, ha tutte le occorrenze di "-" sostituite con "" e ha il prefisso "HTTP" per dare a il nome della variabile.

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

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

+1

Cura di commentare perché stai proponendo questo? Forse aggiungendo del codice da te stesso? Il link reindirizza a "Come scaricare le intestazioni delle richieste HTTP con PHP in CGI/FastCGI SAPI", sei sicuro che l'OP ha richiesto CGI/FastCGI SAPI? – Yaroslav

+1

Perché nessuno ha suggerito correttamente come eseguire il dump delle intestazioni HTTP con PHP. – Cmyker

+1

Avevo bisogno di scaricare le intestazioni http nel mio script. Ho letto questo argomento, ma nessuna delle risposte di cui sopra è stata utile e ho trovato la soluzione da sola. Ora sto condividendo queste informazioni con altre persone. Cosa c'è che non va? – Cmyker

4

mettendo insieme le risposte da Peter Bailey e Cmyker si ottiene qualcosa di simile:

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

che funziona con il php -S built-in server web, che è un piuttosto comodo funzionalità di PHP.

1

file_get_contents ('php: // input') non funzionerà sempre.

Ho una richiesta con le intestazioni "content-length = 735" e "php: // input" è una stringa vuota. Quindi dipende da quanto buona/valida sia la richiesta HTTP.

+0

Ho lo stesso problema quando uso POSTMAN, quindi per richieste regolari uso solo $ _REQUEST o $ _POST/$ _ OTTIENI –

Problemi correlati