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