courbes bleues

Requête HTTP GET en curl

Comment faire une requête get en curl avec php

curl php, php curl, php curl get, requete http, curl get, php http get, curl header, requete php, curl http, curl php get, curl get php, curl redirection, http get php, php requete http, requete http php

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

 

Vidéos drôles

Du fingerboard en taille réelle Un bateau accoste sur la plage Un policier saute une barrière Les rouquins ont une ame C'est toujours mieux de se faire rouler dessus Un problème moteur chez ses soldats Un saut raté dans la piscine Démonstration de Kung Fu par un soldat coréen Comment ne pas faire du vin chaud au micro onde