2011-02-28 24 views
39

Tengo un script php que devuelve simplemente texto sin cualquier html. Ahora quiero hacer una solicitud cURL para que el guión y me da la siguiente respuesta:¿Cómo eliminar encabezados HTTP de la respuesta CURL?

HTTP/1.1 200 OK 
Date: Mon, 28 Feb 2011 14:21:51 GMT 
Server: Apache/2.2.14 (Ubuntu) 
X-Powered-By: PHP/5.2.12-nmm2 
Vary: Accept-Encoding 
Content-Length: 6 
Content-Type: text/html 

6.8320 

La respuesta es sólo tendrán algo 6,8320 como texto sin formato html. Quiero recuperarlo de la respuesta anterior simplemente eliminando la información del encabezado.

ya que minified el guión un poco:

$url = $_GET['url']; 

if (!$url) { 

    // Passed url not specified. 
    $contents = 'ERROR: url not specified'; 
    $status = array('http_code' => 'ERROR'); 

} else if (!preg_match($valid_url_regex, $url)) { 

    // Passed url doesn't match $valid_url_regex. 
    $contents = 'ERROR: invalid url'; 
    $status = array('http_code' => 'ERROR'); 

} else { 
    $ch = curl_init($url); 

    if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') { 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST); 
    } 

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    curl_setopt($ch, CURLOPT_USERAGENT, $_GET['user_agent'] ? $_GET['user_agent'] : $_SERVER['HTTP_USER_AGENT']); 

    list($header, $contents) = preg_split('/([\r\n][\r\n])\\1/', curl_exec($ch), 2); 

    $status = curl_getinfo($ch); 

    curl_close($ch); 
} 

// Split header text into an array. 
$header_text = preg_split('/[\r\n]+/', $header); 

if (true) { 
    if (!$enable_native) { 
    $contents = 'ERROR: invalid mode'; 
    $status = array('http_code' => 'ERROR'); 
    } 

    // Propagate headers to response. 
    foreach ($header_text as $header) { 
    if (preg_match('/^(?:Content-Type|Content-Language|Set-Cookie):/i', $header)) { 
     header($header); 
    } 
    } 
    print $contents; 
} 

Alguna idea de lo que necesito cambiar para eliminar la información del encabezado de la respuesta?

+0

La cabecera Content-type' está mal! – reinierpost

+1

posible recalificar el título mencionar que es para PHP, estoy buscando la línea de comando curl –

Respuesta

60

Simplemente configure CURLOPT_HEADER en false.

+0

Disculpe, señor, ¿cómo hace esto si utiliza el comando CURL get en ssh? – Luka

-2

¡No instale CURLOPT_HEADER!

+0

esto elimina toda la respuesta –

+0

Entonces algo más está sucediendo. CURLOPT_HEADER le dice a CURL que incluya el encabezado en lo que devuelve curl_exec. Establecerlo en falso (que es el valor predeterminado de todos modos) NO debe eliminar toda la respuesta. –

+0

extraño para mí también. estableciendo en falso o eliminando ambos resultados en una página en blanco. –

1

Si está utilizando nuSoap, puede acceder a los datos sin encabezados con $nsoap->responseData o $nsoap->response, si desea los encabezados completos.

En caso de que alguien lo necesite.

-2

Simplemente no se establece la curl_header en la solicitud de rizo o se establece en z or false
como esto
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HEADER, false);

1

Si por alguna razón usted tiene que curl_setopt($ch, CURLOPT_HEADER, 1); para obtener las cookies, por ejemplo, la siguiente trabajados para mi. No estoy seguro si es fiable al 100%, pero vale la pena intentarlo

$foo = preg_replace('/HTTP(.*)html/s',"",$curlresult); 
4

Sólo por un uso posterior si alguien necesita otro lugar. Estaba en la misma situación, pero solo necesito eliminar el texto del encabezado, no el contenido. La respuesta que estaba haciendo en la cabecera era (incluyendo espacios en blanco):

HTTP/1.1 200 OK 
Cache-Control: private, no-cache, no-store, must-revalidate 
Content-Language: en 
Content-Type: text/html 
Date: Tue, 25 Feb 2014 20:59:29 GMT 
Expires: Sat, 01 Jan 2000 00:00:00 GMT 
Pragma: no-cache 
Server: nginx 
Vary: Cookie, Accept-Language, Accept-Encoding 
transfer-encoding: chunked 
Connection: keep-alive 

quería eliminar a partir de HTTP hasta keep-alive con espacios en blanco:

$contents = preg_replace('/HTTP(.*)alive/s',"",$contents); 

que hizo por mí.

+0

Solución rápida. Gracias – bkac

32

Haga esto después de su llamada rizo:

$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); 
$header = substr($response, 0, $header_size); 
$body = substr($response, $header_size); 
+0

Esto me salvó el día. Gracias. –

+0

esta debería ser la respuesta seleccionada. Puedes mantener los detalles pero no hacer que aparezcan en el resultado. Mucho mejor que no tenerlos si realmente los necesitas (en mi caso los necesitaba). – moeiscool

1

actualizar el valor de CURLOPT_HEADER a 0 para falso

curl_setopt($ch, CURLOPT_HEADER, 0); 
Cuestiones relacionadas