Vous n'êtes pas identifié(e).
J'ai testé en local et sur un dédié et j'arrive pas à faire fonctionner le script de décodage de captcha pour les 15 mins que j'ai passé dessus, ça marche chez toi?
CeKwa ?
🔴 Hors ligne
Alors justement c'est ça le problème.
ça foire ici :
J'ai bien le retour d'un flux PNG dans $data mais impossible de le décoder avec la fonction copierImage(). Le fichier PNG ne s'enregistre pas non plus sur le serveur.
Peut-être que the-baker pourrait nous filer un coup de main ?
🔴 Hors ligne
Je précise que la récupération du cookie et la création du fichier "myCookie" s'effectue bien de mon côté.
Son contenu :
www.orbee.fr FALSE / FALSE 0 PHPSESSID 8088ce750951371a07a7046b236ba105
Puis voici l'erreur rencontrée au niveau de la fonction : ERROR occured while trying to stat image file: 1
Dernière modification par [F]ab (2013-05-16 18:47:07)
🔴 Hors ligne
Salut Ftab,
Le problème vient que tu passe le résultat du "curl" directement à la fonction "copierImage" alors que celle ci n'accepte que le chemin vers l'image que tu as sauvé sur disque.
Voici ce que tu devrais faire :
$path = LE CHEMIN OU TU VEUX ENRENGISTRER TON IMAGE
if(file_exists($path)){
unlink($path);
}
$fp = fopen($path,'x');
fwrite($fp, $data );
fclose($fp);
$image = copierImage($path);
Dernière modification par abusalih (2013-05-17 07:19:38)
🔴 Hors ligne
Ha c'est gentil de me venir en aide abusalih !
Je me doutais que ça venait de là mais je ne savais pas comment procéder ! Tu viens de m'apporter la solution merci encore
Je test ça et je reviens pour vous faire part des résultats !
Dernière modification par [F]ab (2013-05-17 09:05:02)
🔴 Hors ligne
Ok avec ton code abusalih l'image se copie bien sur le serveur.
Maintenant ça bloque ici :
$captcha est toujours vide.
Par contre dans $lettres j'ai bien un résultat binaire :
Array
(
[0] => 110000011110000011110000011110000011111111111111111111111111111110000011110000011110000011110000011110000011
[1] => 111111111111000110001100011000110001100011000
[2] => 011111111111111111100011110000111100001111000011110001111111111101111111000000110000001100000011
[3] => 111001111111011101111110001111000011110000111100011111101110111111100111
[4] => 111111111111111100000110000011100001111110111111100001110000111000011111111111111110
)
Pour cet exemple, le captcha en image est : Hrqx5
Le code binaire ne semble pas correspondre aux lettres tu tableau $caracteres, c'est probablement pour cette raison que $captcha est vide quand j'utilise la fonction extraireMot()
Dernière modification par [F]ab (2013-05-17 10:29:25)
🔴 Hors ligne
Je viens de passer l'image captcha enregistrée sur mon serveur dans le script en ligne de the-baker et, effectivement, le code correspond à moitié.
"N" à la place de "H" et "S" à la place de "5" :
Ce qui est étrange c'est que dans mon cas extraireMot() sur cette image ne donne tout simplement aucun résultat...
Dernière modification par [F]ab (2013-05-17 10:59:38)
🔴 Hors ligne
Hey salut,
Alors pour la copie de l'image, la solution de abusalih fonctionne.
Pour le fait que le captcha est tjs vide, c'est un problème de portée de variable, $caracteres n'est pas déclaré dans ta fonction donc pour lui c'est une variable vide. Pour résoudre le problème Il faut ajouter, juste après la déclaration de ta fonction submit :
D'une manière générale, le script donne :
global $caracteres;
$cookie = "myCookie";
$parse = parse_url($url); // on décompose l'url de l'annuaire
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, urldecode('http://'.$parse['host'].'/antibot.php'));
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); // récupération du cookie
curl_setopt( $ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
$data = curl_exec($ch);
$path = 'captcha.png';
if(file_exists($path)){
unlink($path);
}
$fp = fopen($path,'x');
fwrite($fp, $data );
fclose($fp);
$matrice = imageVersMatrice('captcha.png');
$lettres = extraireLettres($matrice);
$captcha = extraireMot($lettres, $caracteres); // le resultat du captcha
$datas['antibotcode'] = $captcha; // on rajoute un champ au tableau à poster avec le captcha
curl_close($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); // connexion à la page de soumission de l'annuaire
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $datas); // on post les données du formulaire [avec le captcha récupéré plus haut]
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
}
Voila voila, testé et approuvé.
Attention si ton annuaire se trouve dans un dossier : www.site.fr/annuaire/index.php, La ligne "http://'.$parse['host'].'/antibot.php" ne fonctionnera pas puisqu'il te renverra "www.site.fr/antibot.php" au lieu "www.site.fr/annuaire/antibot.php".
Pour le problème d'erreur de résolution, freeglobes utilise par défaut la police tahoma de taille 12:
Le captcha ne correspond pas à celui par défaut, l'admin à donc changer celle-ci:
On voit la différence entre les 5, à gauche captcha par défaut, à droite le tien.
Donne moi l'adresse de l'antibot.php de l'annuaire et je te ferai la tableau $caracteres correspondant.
^^
🔴 Hors ligne
Merci pour toutes ces précisions the-baker tout est maintenant plus clair
Voici l'annuaire que j'ai testé avec la police modifiée :
http://www.orbee.fr/antibot.php
[F]ab
🔴 Hors ligne
J'ai testé avec un autre annuaire, et c'est carrément le pied
Enregistrement effectué ! Votre site va être examiné et vous serez averti de toute décision prise.
Merci bcp pour ce super script et pour ton aide the-baker !
Ne t'embête pas à modifier les caractères pour l'annuaire que je t'ai passé si c'est un cas isolé...
A+
[F]ab
Dernière modification par [F]ab (2013-05-17 16:24:07)
🔴 Hors ligne
Salut les gars,
J'aurai vraiment aimé contribuer au dev, mais trop occupé... vous avez fait du bon taff!!! Bravo!
"Si vous ne faites pas d'erreurs, vous ne faites probablement pas grand chose..."
🔴 Hors ligne
Vous vous cassez bien la tête pour bypasser ce captcha hyper simple
une simple ligne de code suffit et le package à installer se trouve ici : https://code.google.com/p/tesseract-ocr/
L'avantage c'est qu'avec çà on peut bypasser la plupart de ceux qu'on rencontre et pas seulement les captcha freeglobe...