Comment vérifier les entêtes HTTP avec CURL et PHP

Vérifier le code de retour d'une URL peut notamment être utile pour vérifier si une page/lien existe toujours ou non, ou encore pour vérifier si un site est down.

<?php

$url = 'http://www.oseox.fr';
$timeout = 10;

// Initialisation d'une session cURL
$ch = curl_init($url);

// Forcer l'utilisation d'une nouvelle connexion (pas de cache)
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);

// Définition du timeout de la requête (en secondes)
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

// Si l'URL est en HTTPS
if (preg_match('`^https://`i', $url))
{
 // Ne pas vérifier la validité du certificat SSL
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}

// Suivre les redirections [facultatif]
// www.oseox.fr redirige par exemple automatiquement vers oseox.fr
// Le code de retour serait ici 301 si l'on ne suivait pas les redirections
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// Récupération du contenu retourné par la requête
// sous forme de chaîne de caractères via curl_exec()
// (directement affiché au navigateur client sinon)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Ne pas récupérer le contenu de la page requêtée
curl_setopt($ch, CURLOPT_NOBODY, true);

// Execution de la requête
curl_exec($ch);

// Récupération du code HTTP retourné par la requête
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// Fermeture de la session cURL
curl_close($ch);

echo $http_code;
?>

Les principaux entêtes HTTP utiles sont les suivants :

  • 200 : Ok, la requête a été traitée avec succès
  • 301 : Redirection permanente (si CURLOPT_FOLLOWLOCATION = false)
  • 302 : Redirection temporaire (si CURLOPT_FOLLOWLOCATION = false)
  • 401 : Accès refusé (demande d'authentification HTTP)
  • 403 : Accès refusé (sans demande d'authentification)
  • 404 : Page non trouvée
  • 500 : Erreur interne du serveur (peut résulter d'un plantage site/serveur)
  • 503 : Service indisponible (peut résulter d'un plantage site/serveur)

Une question ? Venez la poser sur notre forum développement web !

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.

Newsletter Marketing