20-05-2010, 03:26 PM
Alors pour ma part, j'ai déjà développé quelques bots, dont certains se connectaient à des espaces membres.
Ça peut être fait avec cURL, ou avec autre chose, genre Zend, probablement PERL... avec cURL c'est très simple.
Deux vieilles fonctions pour l'exemple :
La 2eme fonction attend des paramètres "bruts", type champ1=val&champ2=val... Vous pouvez bien entendu mettre un tableau en argument et recréer la chaine dans la fonction... bref. Avec ces deux méthodes vous pouvez déjà simuler la connexion d'un internaute, avec des requêtes GET et des requêtes POST, et la gestion des cookies, qui sont stockés dans le fichier cookie.txt.Ça peut être fait avec cURL, ou avec autre chose, genre Zend, probablement PERL... avec cURL c'est très simple.
Deux vieilles fonctions pour l'exemple :
Code PHP :
<?php
//récupérer continu page et cookies
function get_url_contents($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$ret = curl_exec($ch);
curl_close($ch);
return $ret;
}
/* POST request */
function post_url_fields($url, $fields)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$ret = curl_exec($ch);
curl_close($ch);
return $ret;
}
La fonction la plus importante comme vous pouvez vous en douter est curl_setopt :
http://fr2.php.net/manual/fr/function.curl-setopt.php
Ça c'est la base. Ensuite, pour faire un truc réaliste, il faut suivre le schéma de navigation d'un internaute normal. Genre passer par la page d'accueil, la page de login s'il y en a une, avant de se logguer, même s'il n'y a rien à récupérer sur ces pages. Il faut aussi penser à renvoyer le referer ( CURLOPT_REFERER ), l'user-agent et bien scruter les input de type hidden dans les pages, qui contiennent souvent des token de sécurité ( sécurité à deux balles pour le coup ) qui doivent être renvoyés pour que ça marche.
And voilà !