bloginfo

Classe PHP cURL / Scrapping en licence GPL

Mar 16th, 2012 (edited)
244
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. /*
  3. Author : Denis Szalkowski Copyright © 2012
  4. Licence : GNU General Public Licence v3.0
  5.  
  6. Cette classe a pour objet de récupérer le contenu d'une url à l'aide de Curl.
  7. Elle peut être à l'origine d'outils de scrapping.
  8.  */
  9. class Curl{
  10.     private static $ua=Array(
  11.         'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2',
  12.         'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.0 Safari/535.24',
  13.         'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:8.0.1) Gecko/20111117 Firefox/8.0.1',
  14.         'Opera/9.80 (Windows NT 6.1; U; fr) Presto/2.10.229 Version/11.61'
  15.     );
  16.     /*
  17.     Constructeur
  18.     */
  19.     function  __construct()
  20.     {
  21.     }
  22.     /*
  23.     Exécution de la requête
  24.     */
  25.     public function execHttp($url)
  26.     {
  27.       if(!preg_match('/^https?:\/\//i',$url))
  28.       {
  29.           echo "Erreur : l'url doit être de type http:// ou https://";
  30.           exit;
  31.       }
  32.      
  33.       //Récupération du referer à partir de l'url transmise
  34.       preg_match('/^(https?:\/\/)([^\/]+)\//i',$url,$referers);
  35.       $referer=$referers[1].$referers[2];
  36.       /*
  37.       $u, $t, $s sont respectivement utilisées pour disposer :
  38.       - d'un user agent aléatoire
  39.       - d'un timeout aléatoire
  40.       - d'un débit aléatoire
  41.        */
  42.       //$u=rand(0,3);
  43.       $t=rand(5,10);
  44.       $s=rand(105000,235000);
  45.       //Utilisation de Curl
  46.       $ch = curl_init();
  47.       curl_setopt($ch, CURLOPT_URL, $url);
  48.       curl_setopt($ch, CURLOPT_USERAGENT,self::$ua[0]);
  49.       curl_setopt($ch, CURLOPT_COOKIESESSION,1);      
  50.       curl_setopt($ch, CURLOPT_COOKIEFILE,'cookie.txt');
  51.       curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
  52.       curl_setopt($ch, CURLOPT_HEADER, 0);
  53.       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  54.       curl_setopt($ch, CURLOPT_REFERER, $referer);
  55.       curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
  56.       //Pour le SSL
  57.       curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  58.       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  59.       $headers=Array(
  60.           'Accept: text/plain',
  61.           'Accept-Charset: utf-8',
  62.           'Accept-Encoding: compress; gzip; deflate',
  63.           'Accept-Language: fr-FR',
  64.           'Cache-Control: no-cache',
  65.           'Content-Type: text/plain',
  66.           'Pragma: no-cache',
  67.           "Referer: ".$referer,
  68.           "User-Agent: ".self::$ua[0]
  69.       );
  70.       curl_setopt( $ch, CURLOPT_HTTPHEADER,$headers);
  71.       //curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
  72.       curl_setopt($ch, CURLOPT_HTTPGET, 1);
  73.       curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $t);
  74.       curl_setopt($ch, CURLOPT_TIMEOUT,20);
  75.       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  76.       // En cas d'utilisation de Privoxy, pensez alors à le coupler à TOR
  77.       //curl_setopt($ch, CURLOPT_PROXY, "http://127.0.0.1:8118");
  78.       //curl_setopt($ch, CURLOPT_PROXYPORT, 8118);
  79.       curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
  80.       curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
  81.       curl_setopt($ch, CURLOPT_MAXCONNECTS, 1);
  82.       curl_setopt($ch, CURLOPT_MAX_RECV_SPEED_LARGE, $s);    
  83.       curl_setopt($ch, CURLOPT_MAX_SEND_SPEED_LARGE, $s);
  84.       curl_setopt ($ch, CURLOPT_ENCODING, 'gzip,deflate');
  85.       //curl_setopt($ch, CURL_HTTP_VERSION, 'CURL_HTTP_VERSION_1_1');
  86.      
  87.       $html=false;
  88.       try
  89.       {
  90.         $html=curl_exec($ch);
  91.         //Gestion des erreurs Http
  92.         $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  93.         if($httpCode >= 400)
  94.         {
  95.             echo 'Code http: '.$httpCode."\n";
  96.             exit;
  97.         }
  98.       }
  99.       catch(Exception $e)
  100.       {
  101.           echo 'Exception : '.$e;
  102.           exit;
  103.       }
  104.       curl_close($ch);
  105.       return $html;
  106.     }
  107.     function  __destruct()
  108.     {
  109.     }
  110. }
  111. //Exemple d'utilisation de la classe
  112. /*
  113. require 'curl.class.php';
  114. ini_set('display_errors', 1);
  115. $oCurl=new Curl();
  116. echo $oCurl->execHttp('http://www.dsfc.net/feed/');
  117. unset($oPage);
  118. */
  119. ?>
RAW Paste Data Copied