Lire les en-têtes d’une réponse HTTP
Comment lire les entêtes HTTP avec CURL et PHP ?
Un cas un petit peu particulier puisque ici, contrairement à la vérification du code de retour HTTP, les headers sont à récupérer de manière identique à la récupération du contenu d'une requête CURL.
On indique donc à CURL que l'on ne veut pas le contenu de la page requêtée (CURLOPT_NOBODY), mais uniquement les headers à la place du contenu (CURLOPT_HEADER).
Ce premier script nous renvoie quelque chose comme :
HTTP/1.1 301 Moved Permanently
Date: Thu, 20 Jan 2011 10:05:29 GMT
Server: Apache/1.3.34 (Debian) PHP/5.2.0-8+etch15
Location: https://oseox.fr/
Content-Type: text/html; charset=iso-8859-1
HTTP/1.1 200 OK
Date: Thu, 20 Jan 2011 10:05:29 GMT
Server: Apache/1.3.34 (Debian) PHP/5.2.0-8+etch15
Vary: Host
X-Powered-By: PHP/5.2.0-8+etch15
Content-Type: text/html; charset=iso-8859-1
Voilà une petite fonction qui permet de parser la chaîne retournée afin d'en extraire les headers dans un tableau de façon à pouvoir les exploiter plus aisément.
<?php
/*
//...
$headers = curl_exec($ch);
curl_close($ch);
$headers = my_curl_parse_headers($headers);
*/
function my_curl_parse_headers($pHeaders)
{
$r = array();
if ($pHeaders)
{
$lines = explode("rn", $pHeaders);
$header_idx = 0;
foreach ($lines as $line)
{
if (preg_match('`^(?:(HTTP/[^s]+)|([^:s]+):) (.*)$`i', $line, $matches))
$r[$header_idx][] = array(
'k' => $matches[1] ? $matches[1] : $matches[2],
'v' => $matches[3]
);
else
$header_idx++;
}
}
return $r;
}
?>


