Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2525 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  passer un captcha avec curl

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

passer un captcha avec curl

n°2019925
pimsa
Posté le 30-08-2010 à 18:15:19  profilanswer
 

bonjour,
 
je précise avant tout que je ne cherche pas à produire du spam avec mon script :jap:  
 
donc voilà, je souhaite programmer un bot qui va devoir se logguer sur mon panneau utilisateur d'un site distant. je suis tout à fait capable de gérer ça moi-même et je l'ai déjà fait, or ici, légère complication, le formulaire d'identification présente un captcha. je me suis dit bon pas de soucis, j'ai juste à faire sur ma page perso un truc tel que:
 

Code :
  1. <form method="post" action="?" >
  2. <img src="http://www.domainedistant.com/captcha.php" /> <input type="text" name="captchapost" />
  3. <input type="submit" value="go" />
  4. </form>


 
donc avec mon script sur ma page perso je n'ai plus qu'à taper le code captcha pour qu'ensuite mon bot se loggue et automatise mes taches sur le site distant. or le code captcha que je saisis est toujours incorrect lorsqu'il est soumis via mon script vers le site distant dont la page traite le formulaire di'dentification. j'ai lu un max d'infos sur google et essayé un max de samples, pas moyen de faire tourner mon script à cause du-dit captcha...
 
 j'ai essayé comme j'ai pu le lire ça et là les "cookiejar" et "cookiefile" tels que:

Code :
  1. curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file_path);
  2. curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file_path);


 
mais toujours rien...
 
help?  :(

mood
Publicité
Posté le 30-08-2010 à 18:15:19  profilanswer
 

n°2019969
flo850
moi je
Posté le 30-08-2010 à 22:04:57  profilanswer
 

le captcha présenté a ton bot n'est pas le meme que celui que tu vois

n°2019996
pimsa
Posté le 31-08-2010 à 00:31:16  profilanswer
 

pourquoi?
il n'y a aucun captcha présenté à mon bot. lorsque je lance mon script, mon login et mon pass sont stockées dans des vars, il reste donc à saisir le captcha qui du coup n'a été chargé qu'une seule fois et pas deux comme tu le sous-entends. j'envoie ensuite login+pass+captcha en POST sur la page qui traite le form.
je ne te comprends pas.
 
comment y remédier?

n°2019997
l0g4n
Expert en tout :o
Posté le 31-08-2010 à 01:07:43  profilanswer
 

Ton bot ne se connecte pas sur le site avec le même ID de session, donc, pas la même connexion, donc, à mon avis, protection de php...


---------------
Fort et motivé. Sauf parfois.
n°2019998
pimsa
Posté le 31-08-2010 à 01:27:47  profilanswer
 

et donc comment récupérer l'id de session qui vient avec le captcha, et réinjecter cet id de session en POST avec le captcha qui va bien?

n°2020652
pimsa
Posté le 02-09-2010 à 10:41:38  profilanswer
 

à l'aide  [:kabouk]  [:kabouk]  [:kabouk]

   

bon, voici un bout de code pour prouver ma bonne volonté  [:taijitu:3]

 
Code :
  1. <?php
  2. if(isset($_POST['captcha'])){
  3. $fp = fopen("cookies.txt",'wb');
  4. fclose($fp);
  5. $postfields = array();
  6. $postfields["uid"] = "mail@mail.com";
  7. $postfields["pwd"] = "pass";
  8. $postfields["rlmmemb"] = "MA";
  9. $postfields["var"] = "http%3a%2f%2fdir%2ewebsite%2ecom%2f";
  10. $postfields["img"] = $_POST['captcha'];
  11. $postfields["rmbr"] = "y";
  12. $url = "http://dir.website.com/process.php";
  13. $useragent = "Mozilla/5.0";
  14. $referer = "http://dir.website.com/";
  15. $ch = curl_init($url);
  16. curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt" );
  17. curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt" );
  18. //CURL options
  19. curl_setopt($ch, CURLOPT_POST, 1);
  20. //On poste les données du tableau $postfields
  21. curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
  22. curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  23. curl_setopt($ch, CURLOPT_REFERER, $referer);
  24. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  25. // en cas de redirection
  26. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  27. //Page de résultats et fermeture de session
  28. $result = curl_exec($ch);
  29. curl_close($ch);
  30. //on peut faire un echo du résultat obtenu
  31. echo $result;
  32. }
  33. else{
  34. echo'
  35. <form method="post">
  36. <img src="http://dir.website.com/captcha.php" /><input type="text" name="captcha" />
  37. <input type="submit" />
  38. </form>
  39. ';
  40. }
  41. ?>
  

[:fegafobobos:3]


Message édité par pimsa le 02-09-2010 à 10:42:22
n°2020656
FlyPhp
Posté le 02-09-2010 à 10:53:41  profilanswer
 

Le seul moyen serait de faire wget avec ton bot (ou une copie de l'image avec les fonctions d'image) ainsi ce serait ton bot qui demanderait l'image et ensuite tu n'aurais qu'à l'afficher dans ton navigateur ou sur une page web distante.
D'un autre côté, si il y a un captcha, c'est justement pour éviter l'utilisation des bots donc bon :X


---------------
23Prod, Audit et conception de systèmes d'informations : http://www.23prod.fr
n°2020659
pimsa
Posté le 02-09-2010 à 11:09:52  profilanswer
 

ok je vois le problème.
je viens d'essayer ceci:
 

Code :
  1. copy( 'http://dir.website.com/captcha.php', './captcha.jpg' );


 
sans succès  [:taijitu:3]  
 
sinon je me rends compte également qu'il n'y a rien du tout dans mon fichier cookies.txt...
 
 
 
 
le captcha est là pour éviter le spam & co je pense. je ne cherche pas à nuire, je veux juste me loguer et automatiser un truc que je fais régulièrement.

n°2020661
FlyPhp
Posté le 02-09-2010 à 11:22:47  profilanswer
 

Si tu veux que ton cookie.txt se remplisse il faut que tu récupère le captcha avec les fonctions curl sinon tu n'auras pas le bon id_session quand ton robot récupérera le captcha.
Même si tu ne cherches pas à nuire, le captcha sert à bloquer tous les robots quel qu'il soit, donc c'est normal que ce ne soit pas simple :D


---------------
23Prod, Audit et conception de systèmes d'informations : http://www.23prod.fr
n°2020682
pimsa
Posté le 02-09-2010 à 12:39:04  profilanswer
 

ok. je suis parvenu à récuperer le cookie envoyé par le captcha.php. mais quand j'essaye d'envoyer le formulaire ça ne fonctionne pas, le serveur renvoie une erreur 500  [:kabouk]  
 
 
voici mon code jusqu'ici:
 

Code :
  1. <?php
  2. $useragent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
  3. $referer = "http://dir.website.com/";
  4. if(isset($_POST['captcha'])){
  5. // ETAPE 2 ON SE LOG //////////////////////
  6. $postfields = array();
  7. $postfields["var1"] = "val1";
  8. $postfields["var2"] = "http%3a%2f%dir%2ewebsite%2ecom%2f";
  9. $postfields["uid"] = "mail@mail.com";
  10. $postfields["pwd"] = "pass";
  11. $postfields["img"] = $_POST['captcha'];
  12. $url = "http://dir.website.com/captcha.php";
  13. $ch = curl_init($url);
  14. //CURL options
  15. curl_setopt($ch, CURLOPT_POST, 1);
  16. //On poste les données du tableau $postfields
  17. curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
  18. curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  19. curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
  20. curl_setopt($ch, CURLOPT_REFERER, $referer);
  21. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  22. // en cas de redirection
  23. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  24. curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt" );
  25. //Page de résultats et fermeture de session
  26. $result = curl_exec($ch);
  27. curl_close($ch);
  28. //on peut faire un echo du résultat obtenu
  29. echo '<PRE>'.$result;
  30. //ETAPE 3 J'OUVRE LA PAGE QUI M'INTERESSE ET QUI CONTIENT LES INFOS QUE JE VEUX RECUPERER VIA MON BOT /////////////////
  31. $url3 = "http://dir.website.com/dir/member/file.xml";
  32. $ch3 = curl_init($url3);
  33. curl_setopt($ch3, CURLOPT_USERAGENT, $useragent);
  34. curl_setopt($ch3, CURLOPT_REFERER, $referer);
  35. curl_setopt($ch3, CURLOPT_FRESH_CONNECT, 1);
  36. curl_setopt($ch3, CURLOPT_RETURNTRANSFER, 1);
  37. curl_setopt($ch3, CURLOPT_FOLLOWLOCATION, 1);
  38. curl_setopt($ch3, CURLOPT_COOKIEFILE, "cookies.txt" );
  39. $result3 = curl_exec($ch3);
  40. echo '<PRE>'.$result3;
  41. }
  42. else{
  43. // ETAPE 1 ON RECUPERE LE CAPTCHA //////////////////////
  44. $fp = fopen("cookies.txt",'wb');
  45. fclose($fp);
  46. $url1 = "http://dir.website.com/captcha.php";
  47. $ch1 = curl_init($url1);
  48. curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
  49. curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1);
  50. curl_setopt($ch1, CURLOPT_FRESH_CONNECT, 1);
  51. curl_setopt($ch1, CURLOPT_USERAGENT, $useragent);
  52. curl_setopt($ch1, CURLOPT_REFERER, $referer);
  53. curl_setopt($ch1, CURLOPT_COOKIEJAR, "cookies.txt" ); // je sauvegarde le cookie
  54. copy($url1,'./captcha.jpg');
  55. $result1 = curl_exec($ch1);
  56. curl_close($ch1);
  57. echo'
  58. <form method="post">
  59. <img src="./captcha.jpg" /><input type="text" name="captcha" />
  60. <input type="submit" />
  61. </form>
  62. ';
  63. // FIN ETAPE 1 //////////////////////////////////////////////////////
  64. }
  65. ?>


 
 
 
 
 
 
 
 [:kabouk]  [:kabouk]  [:kabouk]

mood
Publicité
Posté le 02-09-2010 à 12:39:04  profilanswer
 

n°2020699
FlyPhp
Posté le 02-09-2010 à 13:53:38  profilanswer
 

Utilises

Code :
  1. curl -f -O "http://www.monsite.com/image[01-12].jpg

à la place de la fonction copy car sinon tu vas pas récupérer la bonne image (l'image est généré en fonction de l'id_session) et n'oublie pas dans cette commande de préciser ton fonction de cookie (utilises la fonction system)


---------------
23Prod, Audit et conception de systèmes d'informations : http://www.23prod.fr
n°2020719
pimsa
Posté le 02-09-2010 à 14:15:35  profilanswer
 

je ne connais pas la fonction "system"

 

voilà ce que j'ai fais avec la piste que tu me donnes:

 
Code :
  1. // ETAPE 1 ON RECUPERE LE CAPTCHA ET LE COOKIE //////////////////////
  2. $fp = fopen("cookies.txt",'wb');
  3. fclose($fp);
  4. $url1 = "http://dir.website.com/captcha.php";
  5. $ch1 = curl_init($url1);
  6. curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
  7. curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1);
  8. curl_setopt($ch1, CURLOPT_FRESH_CONNECT, 1);
  9. curl_setopt($ch1, CURLOPT_USERAGENT, $useragent);
  10. curl_setopt($ch1, CURLOPT_REFERER, $referer);
  11. curl_setopt($ch1, CURLOPT_COOKIEJAR, "cookies.txt" ); // je sauvegarde le cookie envoyé par captcha.php?
  12. curl_setopt($ch1, CURLOPT_BINARYTRANSFER,1);
  13. $result1 = curl_exec($ch1);
  14. $fp = fopen('./captcha.jpg','wb');
  15. fwrite($fp, $result1);
  16. fclose($fp);
  17. curl_close($ch1);
    

maintenant que j'ai copié l'image en jpg et que j'ai un cookie, j'envoie le formulaire:

 
Code :
  1. // ETAPE 2 ON SE LOG //////////////////////
  2. $url = "http://dir.website.com/login.php";
  3. $ch = curl_init($url);
  4. //CURL options
  5. curl_setopt($ch, CURLOPT_POST, 1);
  6. //On poste les données du tableau $postfields
  7. curl_setopt($ch, CURLOPT_POSTFIELDS, "var1=blabla&for=http%3a%2f%2fdir%2ewebsite%2ecom%2f&uid=mail@mail.com&pwd=pass&rmbvar=y&img=".$_POST['captcha']);
  8. curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  9. curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
  10. curl_setopt($ch, CURLOPT_REFERER, $referer);
  11. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  12. // en cas de redirection
  13. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  14. curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt" ); // j'envoi le cookie en même temps que la requête POST
  15. //Page de résultats et fermeture de session
  16. $result = curl_exec($ch);
  17. curl_close($ch);
  18. //on peut faire un echo du résultat obtenu
  19. echo '<PRE>'.$result;
 

et rien. erreur de login.

 

y'a un problème de cookie ou de session ou de captcha  [:corten:1]


Message édité par pimsa le 02-09-2010 à 14:17:24
n°2020747
FlyPhp
Posté le 02-09-2010 à 14:59:58  profilanswer
 

Oui mais c'est normal faire un fopen c'est comme faire un copy donc c'est normal, il faut que tu copies l'image en même temps que tu récupères la session. Sinon tu récupères la session, et quand tu copies l'image ce n'est pas la même image générée. Pour la fonction system => http://php.net/manual/fr/function.system.php


---------------
23Prod, Audit et conception de systèmes d'informations : http://www.23prod.fr
n°2020752
pimsa
Posté le 02-09-2010 à 15:06:43  profilanswer
 

bah pour l'image normalement c'est ok puisque je fais  
 

Code :
  1. $result1 = curl_exec($ch1);


 
puis  
 

Code :
  1. fwrite($fp, $result1);


 
donc je n'ouvre pas deux fois l'image, je l'ouvre une seule fois, puis je l'enregistre grace à $result1
 
non?  [:fegafobobos:2]  
 
 
 
et je ne comprends pas pourquoi on parle de system()

n°2020785
pimsa
Posté le 02-09-2010 à 17:00:23  profilanswer
 

bon j'ai réussi a le faire fonctionner, je sais casser un captcha maintenant  :D  
 
tu m'as bien mis sur la piste merci à toi, j'aurais pas compris l'histoire du double chargement du captcha/cookie/session (moi + bot) sans ton aide  :jap:
 
 
 
 
 
 
 
 [:fegafobobos:1]


Message édité par pimsa le 02-09-2010 à 17:00:38
n°2020950
FlyPhp
Posté le 03-09-2010 à 10:56:11  profilanswer
 

Content d'avoir pu t'aider ^^


---------------
23Prod, Audit et conception de systèmes d'informations : http://www.23prod.fr
n°2020954
FlyPhp
Posté le 03-09-2010 à 11:06:36  profilanswer
 

N'oublie pas de passer ton post en [Résolu]


---------------
23Prod, Audit et conception de systèmes d'informations : http://www.23prod.fr
n°2132642
Webcourrie​r
Posté le 23-03-2012 à 15:23:35  profilanswer
 

Bonjour
 
Pimsa, j'ai le même problème, et je galère depuis plusieurs jours en tentant de le résoudre.
 
Je n'ai pas saisi ce qui t'a permis de le résoudre. Apparemment, tu as à mettre en place un code qui fonctionne.
 
Pourrais-tu m'aider ?

n°2178448
alf233
Posté le 03-03-2013 à 20:56:03  profilanswer
 

bonjour,
 
je remonte le sujet car j'arrive pas a trouver la solution au probleme
 
voici ma premiere partie du systeme et appatement c'est la que ça ddoit bloquer
 

Code :
  1. // ETAPE 1 ON RECUPERE LE CAPTCHA ET LE COOKIE //////////////////////
  2. $fp = fopen("cookies.txt",'wb');
  3. fclose($fp);
  4. $url1 = "http://monsite.com/antibot.php";
  5. $ch1 = curl_init($url1);
  6. curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
  7. curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1);
  8. curl_setopt($ch1, CURLOPT_FRESH_CONNECT, 1);
  9. curl_setopt($ch1, CURLOPT_USERAGENT, $useragent);
  10. curl_setopt($ch1, CURLOPT_REFERER, $referer);
  11. curl_setopt($ch1, CURLOPT_COOKIEJAR, "cookies.txt" ); // je sauvegarde le cookie envoyé par captcha.php?
  12. curl_setopt($ch1, CURLOPT_BINARYTRANSFER,1);
  13. $result1 = curl_exec($ch1);
  14. $fp = fopen('captcha.jpg','wb');
  15. fwrite($fp, $result1);
  16. fclose($fp);
  17. curl_close($ch1);


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  passer un captcha avec curl

 

Sujets relatifs
passer parametre en session dans hrefPasser de amfphp à Zend_Amf ?
(Php) Utiliser les cookies de curl dans le navigateurcomment verifier existence valeur dans array sans passer par foreach?
Passer une variable qui a un caractere & dans l'URLPasser un argument à travers un Event handler
Passer d'une simulation JAVA sous ExcelCreer des listes d'ojets et se les passer entres fonctions
Passer d'une séquences à l'autre [flash]hover css sans passer par le background
Plus de sujets relatifs à : passer un captcha avec curl


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR