Tutoriel Curl

[CURL] Tuto complet : gestion de blogs

Hello tout le monde  je vous ai préparé un petit tuto qui parcourt les principaux concepts de CURL. A la fin de cet article, vous serez donc capable de créer votre bibliothèque pour gérer vos blogs (du moins, en partie). J’ai choisi ici la plateforme Cowblog car la connexion et la création d’articles est ultra simple à développer avec CURL mais cela […]



Hello tout le monde :)

je vous ai préparé un petit tuto qui parcourt les principaux concepts de CURL. A la fin de cet article, vous serez donc capable de créer votre bibliothèque pour gérer vos blogs (du moins, en partie). J’ai choisi ici la plateforme Cowblog car la connexion et la création d’articles est ultra simple à développer avec CURL mais cela permet de bien comprendre les bases.

Les bases de CURL

Bon, on va commencer avec les bases de CURL.
Tout d’abord, il y a trois fonctions de bases qu’il faut connaître avant de démarrer :

  • La fonction « curl_init » qui permet d’initialiser une session CURL
  • La fonction « curl_setopt » qui permet de spécifier différentes options (on verra ça plus tard)
  • La fonction « curl_exec » qui permet d’exécuter une requête

Pour commencer, nous allons simplement afficher le contenu du site http://www.devandseo.fr.

Voici donc le code qui montre les principales étapes d’une requête CURL:

Normalement, en écrivant ce code, vous devez voir le contenu de mon blog sur votre écran.

 

Récupération d’informations (POST et GET)

Les options

Pour spécifier une option à CURL, on utilise, comme dit plus haut, la fonction « curl_setopt », dont les paramètres sont les suivants :

  • 1er paramètre : la ressource CURL
  • 2ème paramètre : l’option que l’on veut spécifier
  • 3ème paramètre : la valeur à setter à l’option

Récupérer des informations

Dans l’exemple précédent, le contenu de la page est affiché directement dans le navigateur. On va maintenant voir comment récupérer ce contenu dans une variable (très simple également).
L’option à utiliser est : « CURLOPT _RETURNTRANSFER ».
Définie à true, le contenu de la page est renvoyé par la fonction curl_exec. Définie à false, la fonction curl_exec renvoi un booléen qui permet de vérifier la bonne exécution de la requête.

Donc, pour récupérer le contenu de mon blog dans une variable, il suffit d’écrire :


 

Soumission de formulaire

Voilà, on a vu les bases, maintenant on va rentrer un peu plus dans le vif du sujet, en commençant par la soumission de formulaire.
Les options à connaître sont les suivantes :

  • CURLOPT_POST : true pour « POST », false pour « GET » (par défaut)
  • CURLOPT_POSTFIELDS : pour spécifier les données du formulaire

Pour récupérer les champs du formulaire à soumettre, je vous conseille d’installer le plugin « Web Developer ». Une fois sur la page du formulaire, faites un clic droit sur la page, choisissez « Web Developer », puis « Form » et enfin cliquez sur « Informations sur les formulaires ». Cela vous permettra de récupérer tous les champs du formulaires.

On va maintenant essayer de se connecter à notre blog Cowblog.


 

Comme vous pouvez le voir, c’est relativement simple … mais un peu dégueulasse. A la fin de ce tuto, vous trouverez le code complet un peu plus clean.

Les options

Les options dans CURL sont indispensables; il en existe une centaine si je ne dis pas de bêtise. On verra donc seulement les plus importantes, notamment celles concernant les proxies et les cookies.

Les proxies

Pour utiliser des proxies, trois fonctions sont utiles :

  • CURLOPT_PROXY : le nom du proxy (IP:port)
  • CURLOPT_PROXYUSERPWD : si le proxy nécessite une authentification (login:password)
  • CURLOPT_HTTPPROXYTUNNEL : proxy de type HTTP

Les cookies

L’utilisation de cookie avec CURL va nous être utile car nous ne voulons nous reconnecter à chaque fois pour poster un article. On va donc, grâce aux cookies, mémoriser l’identification.

Voici un exemple de processus illustrant l’utilisation de cookies avec CURL :

  • On se connecte sur son blog Cowblog et on sauvegarde les cookies contenant les données de connexion
  • On ferme la session courante CURL
  • On veut écrire un article sans se reconnecter : on initialise une session CURL et on charge les cookies stockés précédemment pour s’identifier
  • On a maintenant accès aux pages nécessitant une identification

Trois options nous intéressent ici :

  • CURLOPT_COOKIE : le contenu du cookie (nom=valeur)
  • CURLOPT_COOKIJAR : le nom du fichier dans lequel curl va stocker les cookies internes.
  • CURLOPT_COOKIFILE : le nom du fichier contenant les données des cookies à utiliser pour la session et qui ont été sauvegardés grâce à l’option CURLOPT_COOKIJAR.

Options utiles

Les autres options qui me semblent utiles et importantes sont les suivantes :

  • CURLOPT_FRESH_CONNECT : forcer l’établissement d’une nouvelle connexion plutôt que celle en cache
  • CURLOPT_HEADER : permet d’inclure les informations d’en-tête dans la valeur de retour (Content-Type, Transfer-Encoding, etc..)
  • CURLOPT_HTTPHEADER : Permet de spécifier les valeurs d’en-têtes
  • CURLOPT_NOBODY : pour indiquer à curl de ne pas lire le contenu (même si la variable Content-Lenght est définie)
  • CUTLOPT_TIMEOUT : temps maximal d’exécution de la requête (en secondes), et donc de la fonction curl_exec
  • CURLOPT_FOLLOWLOCATION : pour suivre les redirections de type ‘Location:’
  • CURLOPT_MAXREDIRS : Nombre maximal de redirections http à suivre (si l’option CURLOPT_FOLLOWLOCATION est à true)
  • CURLOPT_CONNECTTIMEOUT : durée maximale d’établissement de la connexion vers l’hôte (en secondes)
  • CURLOPT_PORT : le port à utiliser pour la requête
  • CURLOPT_AUTOREFERER : pour que CURL définisse automatiquement le referer (lors d’une redirection par exemple)
  • CURLOPT_REFERER : pour spécifier votre propre referer
  • CURLOPT_USERAGENT : pour spécifier un user-agent

Gestion des erreurs

Enfin, le dernier point avant l’exemple concret est la gestion des erreurs avec CURL. Avec CURL, j’ai déjà eu des bugs mystiques (type page blanche ou autres), et les fonctions d’erreurs de CURL m’ont souvent bien aidées, car elle permettent de récupérer de précieuses informations.

En gros, les fonctions sont les suivantes :
– La fonction « curl_errno » renvoi le code d’erreur de la requête (plus d’infos ici :codes d’erreur CURL)
– La fonction « curl_error » renvoi un string contenant le dernier message d’erreur.
– La fonction « curl_getinfo » permet de récupérer de nombreuses informations sur la requête (nombres d’octets envoyés ou reçus, vitesse de téléchargement, code HTTP, etc..)

Exemple concret

Maintenant que l’on a vu les bases de CURL et son utilisation générale, nous allons développer un script complet qui va nous permettre :

  • De vous connecter sur votre blog Cowblog
  • De poster un article récupérer le lien de ce dernier

J’ai utilisé l’héritage PHP car dans notre cas, il va nous permettre d’ajouter de nouvelles plateformes de blogs facilement en implémentant simplement les fonctions de connexion et de créations d’articles.

Notre classe mère :


 

La classe Cowblog :


 

Et enfin notre page index :

 

Pour aller plus loin

Bon, j’éspère que ce tuto vous a plu. Un dernier conseil, jetez un oeil à la fonction curl_multi_exec ;)