2010-06-16 10 views
5

Estoy usando un script cURL para enviar datos de POST a través de un proxy a un script y quiero ver qué encabezados HTTP brutos envía el script cURL. Lista de cosas que he intentado:¿Cómo puedo registrar los encabezados HTTP sin formato con un script PHP?

  • echo curl_getinfo($ch, CURLINFO_HEADER_OUT) no da salida.
  • file_get_contents('php://input') obtiene algunos encabezados HTTP pero no todos.
  • print_r($_SERVER) también recibe algunas cabeceras HTTP, pero no todos (lo sé porque debe haber una cabecera X-reenviado-A y no hay)
  • impresión Todos los Superglobales ($ _POST, $ _GET, $ _REQUEST, $ _FILES, etc.) aún no muestra los encabezados HTTP brutos.
  • http_get_request_headers(), apache_request_headers(), $http_response_header, $HTTP_RAW_POST_DATA no están produciendo todo.

¿Ayuda?

Respuesta

1

Es necesario establecer también la opción CURLINFO_HEADER_OUT:

CURLINFO_HEADER_OUT
TRUE para realizar un seguimiento de la cadena de la solicitud de mango.
Disponible desde PHP 5.1.3. El prefijo CURLINFO_ es intencional.

http://www.php.net/manual/en/function.curl-setopt.php

las siguientes obras:

<?php 

$ch = curl_init('http://www.google.com'); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$result = curl_exec($ch); 

echo curl_getinfo($ch, CURLINFO_HEADER_OUT); 
+1

@php: ah, por lo de hecho, quiere saber qué está enviando el proxy, no qué está enviando el curl. probablemente necesite iniciar sesión en el proxy en sí o en el servidor remoto. Curl no sabe qué encabezados está agregando tu proxy –

0

Si se ejecutan como un módulo de Apache entonces apache_request_headers() hace lo que necesitan.

Para casi cualquier otra arquitectura, solo podrá seleccionar las cosas que se registran en $ _SERVER o deberá encontrar la forma de registrar la información utilizando la configuración del servidor web.

+2

Debes ser fan de C. – Pacerier

3

Encienda CURLOPT_HEADER, no CURLINFO_HEADER_OUT, a continuación, dividir en \ r \ n \ r \ n (que es donde termina la cabecera) con un recuento de división máxima de 2:

<?php 
$ch = curl_init('http://www.yahoo.com/'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, true); 
$result = curl_exec($ch); 
if ($result !== false) { 
    $split_result = split("\r\n\r\n", $result, 2); 
    $header = $split_result[0]; 
    $body = $split_result[1]; 
    /** Process here **/ 
} else { 
    /** Error handling here **/ 
} 
+0

esto es básicamente correcto, excepto que debes usar explotar en lugar de dividir y no cuenta para múltiples encabezados (como un redireccionamiento 301/302) – cwd

Cuestiones relacionadas