cURL : en route vers le scrapping

cURL : une première étape pour tout black hat qui se respecte ! ;+)cURL est à l’origine une commande en ligne dont l’objet est de transférer les données à partir des protocoles de l’Internet et notamment à partir des adresses Http et Https. C’est un outil qui sait se montrer extrêmement discret, lorsqu’il est couplé à Privoxy et à Tor.

Une classe PHP sous licence Gnu General Public License

Sous Linux, cURL est directement intégré en PHP. En revanche sous Windows, vous devez activer le module dans le fichier php.ini en décommentant la ligne extension=php_curl.dll.

<?php
/*
Author : Denis Szalkowski Copyright © 2012
Licence : GNU General Public Licence v3.0

Cette classe a pour objet de récupérer le contenu d’une url à l’aide de Curl.
Elle peut être à l’origine d’outils de scrapping.
*/
class Curl{
private static $ua=Array(
‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2′,
‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.0 Safari/535.24′,
‘Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:8.0.1) Gecko/20111117 Firefox/8.0.1′,
‘Opera/9.80 (Windows NT 6.1; U; fr) Presto/2.10.229 Version/11.61′
);
/*
Constructeur
*/
function  __construct()
{
}
/*
Exécution de la requête
*/
public function execHttp($url)
{
if(!preg_match(‘/^https?:\/\//i’,$url))
{
echo « Erreur : l’url doit être de type http:// ou https:// »;
exit;
}

//Récupération du referer à partir de l’url transmise
preg_match(‘/^(https?:\/\/)([^\/]+)\//i’,$url,$referers);
$referer=$referers[1].$referers[2];
/*
$u, $t, $s sont respectivement utilisées pour disposer :
– d’un user agent aléatoire
– d’un timeout aléatoire
– d’un débit aléatoire
*/
//$u=rand(0,3);
$t=rand(5,10);
$s=rand(105000,235000);
//Utilisation de Curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT,self::$ua[0]);
curl_setopt($ch, CURLOPT_COOKIESESSION,1);
curl_setopt($ch, CURLOPT_COOKIEFILE,’cookie.txt’);
curl_setopt($ch, CURLOPT_COOKIEJAR,’cookie.txt’);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
//Pour le SSL
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$headers=Array(
‘Accept: text/plain’,
‘Accept-Charset: utf-8′,
‘Accept-Encoding: compress; gzip; deflate’,
‘Accept-Language: fr-FR’,
‘Cache-Control: no-cache’,
‘Content-Type: text/plain’,
‘Pragma: no-cache’,
« Referer: « .$referer,
« User-Agent: « .self::$ua[0]
);
curl_setopt( $ch, CURLOPT_HTTPHEADER,$headers);
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, « GET »);
curl_setopt($ch, CURLOPT_HTTPGET, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $t);
curl_setopt($ch, CURLOPT_TIMEOUT,20);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// En cas d’utilisation de Privoxy, pensez alors à le coupler à TOR
//curl_setopt($ch, CURLOPT_PROXY, « http://127.0.0.1:8118″);
//curl_setopt($ch, CURLOPT_PROXYPORT, 8118);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_MAXCONNECTS, 1);
curl_setopt($ch, CURLOPT_MAX_RECV_SPEED_LARGE, $s);
curl_setopt($ch, CURLOPT_MAX_SEND_SPEED_LARGE, $s);
curl_setopt ($ch, CURLOPT_ENCODING, ‘gzip,deflate’);
//curl_setopt($ch, CURL_HTTP_VERSION, ‘CURL_HTTP_VERSION_1_1′);

$html=false;
try
{
$html=curl_exec($ch);
//Gestion des erreurs Http
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode >= 400)
{
echo ‘Code http: ‘.$httpCode. »\n »;
exit;
}
}
catch(Exception $e)
{
echo ‘Exception : ‘.$e;
exit;
}
curl_close($ch);
return $html;
}
function  __destruct()
{
}
}
//Exemple d’utilisation de la classe
/*
require ‘curl.class.php’;
ini_set(‘display_errors’, 1);
$oCurl=new Curl();
echo $oCurl->execHttp(‘http://www.dsfc.net/feed/’);
unset($oPage);
*/
?>

Télécharger la classe

Vous pouvez télécharger ce code à partir de ce lien. Elle est aussi sur Pastebin.

 

Dsfc Dsfc

cURL : en route vers le scrapping
1 vote, 5.00 avg. rating (95% score)
Tags : , , , , , , , , , , ,
Commentaires

[...] j’ai omis de qualifier le scrapping dans mon article d’hier consacré à cURL, c’est que j’avais l’intention de vous en parler dans cet article consacré à [...]

Merci beaucoup pour cet article, il est très détaillé. On reconnait l’expertise d’un formateur.
Vous n’êtes pas sur twitter?

@Jeromeweb

Vous pouvez me suivre sur http://twitter.com/informatique.

Laisser un commentaire

(requis)

(requis)


*