PHP : Utiliser Curl pour effectuer des recherches automatiquement

Partager cet article

Temps estimé pour la lecture de cet article : 15 min

cURLest une bibliothèque qui va permettre d’effectuer des requêtes vers un site web donné. On pourra ainsi par exemple soumettre un formulaire comme si c’était vous qui le faisiez depuis votre navigateur. On peut donc automatiser presque tout ce que nous faisons sur internet grâce à cURL et un peu de PHP.

Personnellement, j’utilise la librairie quotidiennement pour réduire le poids de mes images, mais on peut également penser à un système de partage de fichiers. Par exemple, un utilisateur upload un pdf, en utilisant google on pourrait automatiquement faire correspondre l’image au pdf envoyé.

Installer cURL sous Linux

Afin donc d’utiliser la bibliothèque, il nous faut bien sûr l’installer rien de plus simple :

sudo apt-get install php5-curl

Par contre, il ne faut pas oublier de relancer le serveur apache :

sudo apache2ctl restart

Utiliser cURL

Pourquoi utiliser cURL, si on veut juste récupérer du contenu à partir d’une URL, il nous suffit de la lire et de l’afficher. Or pour faire ça, on peut simplement utiliser la fonction file_get_contents.

$html = file_get_contents('https://borntocode.fr/');
echo $html;

Mais certaines pages, vont demander des cookies, un système d’authentification ou que sais-je d’autres. Or grâce à cURL, c’est possible !

cURL est plutôt simple à utiliser, il n’y a que 4 étapes basiques :

  1. On initialise cURL
  2. On précise les options à utiliser
  3. On exécute la requête
  4. On libère les ressources

Effectuer une simple requête GET

Pour cet exemple, nous allons récupérer les dernières questions postées sur StackOverflow pour le tag PHP. Pour ce faire, on va utiliser le flux RSS du site.

<?php
    // On vérifie que cURL est installé 
    if (!function_exists("curl_init")){
        die("Désolé cURL n'est pas installé !");
    }

    // Init
    $url = "https://stackoverflow.com/feeds/tag?tagnames=php&sort=newest";
    $curl = curl_init();
    
    // Options
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_URL, $url);
    
    // Execut
    $resp = curl_exec($curl);

    // Libération des ressources
    curl_close($curl);

    echo $resp;
?>

Vous l’aurez deviné, l’option CURLOPT_URL permet de préciser l’url à utiliser.

L’option CURLOPT_RETURNTRANSFER permet de préciser que la réponse que l’on va recevoir de l’URL passé en paramètre, ne va pas être directement affiché mais elle sera retourné. On peut de cette manière récupérer le résultat dans une variable et pouvoir par la suite parser du contenu par exemple.

Quelques options utiles à connaitre sur cURL

Il est possible de préciser le type d’agent qui va faire la requête vers le site web. Pour ce faire, on utilise la fonction curl_setopt function et notamment l’option CURLOPT_USERAGENT.

    curl_setopt( $ch, CURLOPT_USERAGENT, "User Agent");

Mais quel est l’intérêt ? Et bien tout simplement certains serveurs vont interdire une demande venant d’un utilisateur non identifié ou encore désactivée certaines fonctions.

En précisant un utilisateur, on va pouvoir en quelque sorte tromper le serveur en faisant passer notre demande comme si elle provenait d’un navigateur légitime. Avec cet exemple, le serveur pense que vous utilisez firefox (version 31.0) :

    $userAgent = 'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0';
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);

On peut trouver d’autres exemples d’agents sur internet :

  • Chrome: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2
  • IE 11: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
  • Safari: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A
  • Opera: Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14

Remarque : C’est pour cela qu’il faut toujours se méfier les données fournies par la variable php HTTP_USER_AGENT. En effet, un client peut facilement falsifier cette variable.

L’option CURLOPT_FOLLOWLOCATION permet de préciser que l’on va suivre les redirections que la page que nous appelons peut demandé.

L’option CURLOPT_MAXREDIRS signifie simplement que nous n’allons suivre qu’un maximum de redirections. Cela peut être pratique, notamment si le site sur lequel on effectue une requête bug.

1 comment

  1. Hello. Très Joli site web Mec!! .. Rien à rajouter :)..
    Је vais mettre ce ce site dans meѕ marque ρages et ϳ’en trouve սn suivre le flux rss également
    Јe rajouterais également…Ԛue ϳе ѕuis
    satisfait d’ɑvoir trouvé un tel nombгe d’articles ici même Ԁans ce ce post.
    Merci bеaucoup рoᥙr ce partage.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.