courbes bleues

Requête HTTP GET en curl

Comment faire une requête get en curl avec php

curl php, php curl, get curl, curl get, get php, php get, requete curl, curl http, curl avec php, php requete get, c curl, php http get, curl google, curl redirection, requete get en php

Date de publication : 2010-01-12 12:19:48

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

 
 

b1n@sp1n