Magazine Internet

Requête HTTP GET en curl - PHP

Publié le 12 janvier 2010 par Petitchevalroux

Personnellement je ne suis pas fan de curl mais il était temps que je m'y mette un pour savoir comment cette extension php fonctionne.

En faite c'est assez simple mais le nombre d'options de cette extension fait tout simplement peur pour m'y retrouver je vais faire quelques posts pour les utilisations de base de cette extension php.

Requete Get en curl

Voici le code de base pour exécuter une requête get vers un serveur http :

<?php
/*Initialisation de la ressource curl*/
$c = curl_init();
/*On indique à curl quelle url on souhaite télécharger*/
curl_setopt($c, CURLOPT_URL, "http://www.google.com");
/*On indique à curl de nous retourner le contenu de la requête plutôt que de l'afficher*/
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
/*On indique à curl de ne pas retourner les headers http de la réponse dans la chaine de retour*/
curl_setopt($c, CURLOPT_HEADER, false);
/*On execute la requete*/
$output = curl_exec($c);
/*On a une erreur alors on la lève*/
if($output === false)
{
  trigger_error('Erreur curl : '.curl_error($c),E_USER_WARNING);
}
/*Si tout c'est bien passé on affiche le contenu de la requête*/
else
{
  var_dump($output);
}
/*On ferme la ressource*/
curl_close($c);

?>

Le code précédent donne le résultat suivant :

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.fr/">here</A>.
</BODY></HTML>

Bien entendu ce n'est pas le résultat escompté et c'est le problème principale que rencontre les non initié : il faut absolument être familier avec le protocole http pour comprendre les résultats lorsque l'on manipule curl en php.

Afin de vous familiariser avec le protocole http je vous conseillle la lecture des deux documents suivants :

Suivre les redirections avec curl

Revenons en au résultat précédent, le code html obtenu est en faite une redirection HTTP. C'est à dire que le serveur vous indique que la page recherchée n'est pas à l'adresse indiquée et il vous renvoie vers celle ci. Pour que curl suive les redirections il faut activer l'option CURLOPT_FOLLOWLOCATION.
Voici donc le code qui permet d'obtenir la vrai page d'accueil de google :

<?php
/*Initialisation de la ressource curl*/
$c = curl_init();
/*On indique à curl quelle url on souhaite télécharger*/
curl_setopt($c, CURLOPT_URL, "http://www.google.com");
/*On indique à curl de nous retourner le contenu de la requête plutôt que de l'afficher*/
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
/*On indique à curl de ne pas retourner les headers http de la réponse dans la chaine de retour*/
curl_setopt($c, CURLOPT_HEADER, false);
/*On indique à curl de suivre les redirections par le header http location*/
curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
/*On execute la requete*/
$output = curl_exec($c);
/*On a une erreur alors on la leve*/
if($output === false)
{
  trigger_error('Erreur curl : '.curl_error($c),E_USER_WARNING);
}
/*Si tout c'est bien passé on affiche le contenu de la requête*/
else
{
  var_dump($output);
}
/*On ferme la ressource*/
curl_close($c);
?>

Le résultat que j'ai volontairement tronqué et bien le code html la home page de google.fr :

<!doctype html><html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><title>Google</title>...

La suite dans les prochains jours ...

Image : Leefotos


Retour à La Une de Logo Paperblog

A propos de l’auteur


Petitchevalroux 217 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossiers Paperblog