Avatar ·

¿Cómo obtener los encabezados de respuesta HTTP y el cuerpo de la respuesta en una sola solicitud con cURL en PHP?

¡Hola a todos! Estoy escribiendo un parser en PHP usando cURL. Necesito obtener no solo el contenido de la página (cuerpo de la respuesta), sino también los encabezados HTTP (por ejemplo, Content-Type, Status Code, Location en redirecciones).

El problema es que cuando uso curl_exec(), solo obtengo el cuerpo de la respuesta. Si activo la opción CURLOPT_HEADER => true, el resultado muestra todo junto — tanto los encabezados como el cuerpo — y tengo que separarlos manualmente con explode(), lo cual es muy incómodo.

Aquí está mi código actual:

$ch = curl_init('https://example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$response = curl_exec($ch);
curl_close($ch);

// Tengo que separar de forma forzada
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);

Esta forma funciona, pero me parece sucia. Además,