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

?>

 

A propos de l'auteur

Antoine Beaumont

Antoine Beaumont est Consultant Web et Développeur. Fort d'une expérience construite au sein de grandes agences Web-marketing, pour tous types de comptes, il accompagne désormais les professionnels dans leurs projets Web, de façon souple et objective.