2010-06-28 12 views
36

Necesito un código PHP que realiza un volcado de toda la información en una solicitud HTTP, incluidos los encabezados y el contenido de cualquier información incluida en una solicitud POST. Básicamente, una herramienta de diagnóstico que escupe exactamente lo que envío a un servidor.Cómo imprimir toda la información de una solicitud HTTP a la pantalla, en PHP

¿Alguien tiene algún código que hace esto?

+4

var_dump ($ _ HTTP_REQUEST); ? – Prix

+2

Hoy en día, tanto Chrome como Firefox le permiten ver fácilmente el tráfico de la red (incluidos los encabezados de solicitudes y respuestas) en sus [herramientas de desarrollador] en el navegador (https://developer.chrome.com/devtools/docs/network#http-headers) . No es necesario manipular manualmente los encabezados de impresión en PHP. – dimo414

Respuesta

17

Una forma sencilla sería:

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

Sería necesario un poco de masaje para poner todo en el orden que desee, y para excluir las variables que no se deseen, pero debe darle un nuevo comienzo .

15

Bueno, se puede leer la totalidad del cuerpo de POST like so

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

Y, suponiendo que su servidor web es Apache, puede leer los encabezados de solicitud like so

$requestHeaders = apache_request_headers(); 
+1

mejor respuesta hasta ahora – rikpg

+0

mejor entre todos (y) –

0

, además, puede use get_headers(). que no dependa de Apache ..

print_r(get_headers()); 
+3

get_headers() es para obtener los encabezados de otra URL, no para la solicitud actual. – turibe

3

Si desea que las cabeceras HTTP reales (tanto de petición y respuesta), dará hurl.it a prueba.

Puede usar el comando PHP apache_request_headers() para obtener los encabezados de solicitud y apache_response_headers() para obtener los encabezados de respuesta actuales. Tenga en cuenta que la respuesta se puede cambiar más adelante en el script PHP siempre que el contenido no se haya publicado.

+0

Esta respuesta SO tiene una lista de herramientas como hurl.it: http://stackoverflow.com/a/12637452/363573 – Stephan

7

Nadie mencionó cómo descargar encabezados HTTP correctamente bajo ninguna circunstancia.

De CGI rfc3875 especificación, sección 4.1.18:

meta-variables con nombres que comienzan con "HTTP_" contienen valores leídos de los campos de la cabecera del cliente, si el protocolo utilizado es HTTP. El nombre del campo del encabezado HTTP se convierte a mayúsculas, tiene todas las ocurrencias "-" reemplazadas por "" y tiene "HTTP" antes de dar el nombre de metavariable .

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

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

+1

¿Desea comentar por qué está proponiendo esto? Tal vez agregar un código de ti mismo? El enlace redirige a "Cómo volcar los encabezados de solicitud http con PHP bajo CGI/FastCGI SAPI", ¿está seguro de que OP solicitó CGI/FastCGI SAPI? – Yaroslav

+1

Porque nadie sugirió correctamente cómo volcar encabezados HTTP con PHP. – Cmyker

+1

Necesitaba volcar encabezados http en mi script. Leí este tema, pero ninguna de las respuestas anteriores fue útil y encontré la solución yo mismo. Ahora estoy compartiendo esta información con otras personas. ¿Qué pasa? – Cmyker

4

Juntar respuestas de Peter Bailey y Cmyker se obtiene algo así como:

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

que trabaja con el php -S servidor web integrado, lo cual es una práctica característica de PHP.

1

file_get_contents ('php: // input') no siempre funcionará.

Tengo una solicitud con en los encabezados "content-length = 735" y "php: // input" es una cadena vacía. Entonces, depende de qué tan buena/válida sea la solicitud HTTP.

+0

Tengo el mismo problema cuando uso POSTMAN, por lo que para una solicitud regular solo uso $ _REQUEST o $ _POST/$ _ GET ... –

Cuestiones relacionadas