réalisation d'un bot: automatisation d'une requête

réalisation d'un bot: automatisation d'une requête - PHP - Programmation

Marsh Posté le 25-07-2005 à 09:53:41    

Bonjour,
 
Dans le cadre d'un petit délire personnel (projet très secret confidentiel  :o ), j'aimerai créer un bot qui automatisera une tache sur un site que je consulte assez regulièrement.
Je me suis abondamment documenté et ça tourner principalement autour d'une seul fonction: fsockopen.
en revanche cette page contient un formulaire, suivi d'un AUTRE formulaire (qui à besoin du premier) et, enfin ( :sweat: ), une page de traitement.
J'en ai donc déduis qu'il fallait forcément envoyer (et peut-être recevoir non?  :??: ) des headers POST et/ou GET... or je ne sais pas comment on se débrouille.  :(  
Ensuite il me sera necessaire de récuperer dans le 2ème formulaire le lien d'une image qui pointe sur http://www.lesite.net/index.php?ru [...] wet=tarzan
J'ai besoin de récuperer uniquement la valeur de $cat, ici 645123 et l'envoyer ensuite en POST pour la page de traitement.
 
Pourriez-vous me dresser la liste des fonctions qui me seront capitales? pour le reste, je saurai me demerder. et au besoin je repasserai  [:aras qui rit]  
 
merci à vous.  :jap:


Message édité par pmusa le 25-07-2005 à 09:55:44
Reply

Marsh Posté le 25-07-2005 à 09:53:41   

Reply

Marsh Posté le 25-07-2005 à 09:55:31    

Et cURL ca pourrait pas te servir par hasard  :??:

Reply

Marsh Posté le 25-07-2005 à 09:58:23    

je connais pas CURL et mon serveur ne gère pas de toute façon.  [:airforceone]  
je sais que ça peut se réaliser via PHP, j'ai lu des sources de script. ( en POO :/ )
 
 :jap:

Reply

Marsh Posté le 25-07-2005 à 09:59:19    

non mais cURL c'est juste 1 ou 2 include dans ton PHP donc pourquoi tu me raconte que ton serveur gère pas?

Reply

Marsh Posté le 25-07-2005 à 10:15:11    

bah je dois surement confondre avec un autre.  :??: mais je crois que j'peux pas utiliser CURL sur mon serveur.
de toute façon je connais pas ce truc, oublie.  [:bambookillah]  
 
moi je veux me le faire avec du php.  ;)

Reply

Marsh Posté le 25-07-2005 à 10:16:17    

Bah oui mais justement, avec cURL tu le fais toujours en PHP.
Tu dois pas comprendre ce qu'est cURL.
 
Edit: tu peux même compiler PHP avec cURL, du coup ta plus de include à faire.
 
Edit2: http://www.nexen.net/docs/php/annotee/curl.intro.php


Message édité par cesarr89 le 25-07-2005 à 10:19:09
Reply

Marsh Posté le 25-07-2005 à 10:37:35    

ouè mais non, je connais pas ce truc. :/ désolé de t'embêter.  :) Si je le fait avec CURL je vais poser plein de questions. moi j'veux péachpèèè.  :cry:  
 
 ;)

Reply

Marsh Posté le 25-07-2005 à 10:41:26    

Reply

Marsh Posté le 25-07-2005 à 10:57:50    

non.  :(  
 

Code :
  1. <?php
  2. $fp = fsockopen("http://www.lesite.com/dir/formulaire2.php", 80, $errno, $errstr, 30);
  3. if (!$fp) {
  4.     echo "$errstr ($errno)<br />\n";
  5. } else {
  6.     $out = "POST / HTTP/1.1\r\n";
  7.     $out .= "Connection: Close\r\n\r\n";
  8.     fwrite($fp, $out);
  9.     while (!feof($fp)) {
  10.         echo fgets($fp, 128);
  11.     }
  12.     fclose($fp);
  13. }
  14. ?>


 
là, avec $out, j'aimerai lui envoyer une variable en method POST: $id, aui aurai la valeur 123
 
comment procéder?
 
$out .= "id: 123\r\n\r\n";
 :??:  :D  
 
 
merci

Reply

Marsh Posté le 25-07-2005 à 11:00:22    

Bah utilise le lien que je t'ai filé, c'est obligé que ca te convienne là

Reply

Marsh Posté le 25-07-2005 à 11:00:22   

Reply

Marsh Posté le 25-07-2005 à 12:03:16    

non ça n'a rien à voir.  [:airforceone]

Reply

Marsh Posté le 25-07-2005 à 12:07:47    

Si tu le dis....dans ce cas là je peux pas t'aider plus.

Reply

Marsh Posté le 25-07-2005 à 12:18:43    

merci quand même hein.  :jap:

Reply

Marsh Posté le 25-07-2005 à 12:19:35    

de rien.

Reply

Marsh Posté le 25-07-2005 à 21:05:49    

rebonsoir,  :jap:  
 
pour l'instant je me demerde un peu et j'essaye de mettre en oeuvre tout le charabia que j'ai acquis en poo php. :/
j'ai fais ça sur papier et je vais bientôt le saisir avec mon editeur de texte. je suis asses satisfait.
 
l'ultime problème que je me pose:
 
 
étant donné que je dois accéder à 3 pages au total, et que chacune dépend de la précedente (je rappel l'ordre: 1. indentification via login espace membre, 2.soumission d'un formulaire, 3. accès à la seconde partie du formulaire pour valider avant de recuperer le lien d'une image qui y réside),
je me demande donc comment les synchroniser.  :heink: en fait pour acceder au formulaire je dois être LOGGUE, et si j'envoie des entêtes à la pages d'identification puis à la page du formulaire, il me dit que je suis tjrs pas connecté.  :sweat:  
 
dois-je utiliser la meme ressource issue du fsockopen pour accéder au formulaire pour qu'il "mémorise" mes identifiants et passe au traitement du formulaire??

 
ptain chui pas clair.  :D  
dites moi au moi si je me fais comprendre.  :(  
 
A+

Reply

Marsh Posté le 25-07-2005 à 21:08:20    

perso ca ne passera jamais ton système, puisque si le site utilise le système des cookies et tout le tralala, en PHP tu n'arriveras jamais à obtenir ce que tu recherches à faire

Reply

Marsh Posté le 25-07-2005 à 21:59:17    

Soit généralement des bot en C comme le font les modo sur ce site :)

Reply

Marsh Posté le 26-07-2005 à 08:01:28    

Si si je peux "renseigner" mon cookie au site.  :p  
via le header:
Cookie: mavar1=mavaleur1; mavar2=mavaleur2; mavarN=mavaleurN;
 
il suffit juste de savoir quelles sont les couples clef/valeur que ledit site t'envoie (ce qui est ok en ce qui me concerne) et ça tourne.  :jap:  
 
j'ai fait des tests là enocre et j'arrive à me connecter sans problème sur mon espace membre.  :sol: par contre je ne sais pas comment enchainer l'accès au formulaire. :/ si il faut utiliser la même resource du socket sans la fermet ou peut-être juste essayer d'envoyer mes cookies, etc...
 
personne n'aurait une idée??  :??:

Reply

Marsh Posté le 26-07-2005 à 20:26:38    

ça peut vous aider si je post le code? (up caché)

Reply

Marsh Posté le 26-07-2005 à 20:40:51    

va y toujours ^^

Reply

Marsh Posté le 26-07-2005 à 20:45:02    

donnez moi... 60 minutes.  :whistle:  
 
 :jap:

Reply

Marsh Posté le 26-07-2005 à 22:01:26    

Code :
  1. <?php
  2. class socket{
  3. var $serveur;
  4. var $port;
  5. var $page; #page à traiter
  6. var $methode; #GET ou POST
  7. var $moncookie; #couple clef/valeur de mon cookie
  8. var $post; #requete POST à soumettre
  9. var $headers = array(); #headers reçus
  10. var $cookie_recep = array(); #cookies reçus
  11. function __construct($serveur,$port){
  12. $this->serveur = $serveur;
  13. $this->port = $port;
  14. echo "constructeur ok!<br />\r\n";
  15. }
  16. function url_post($page,$vars){
  17. $this->page = $page;
  18. $this->methode = 'POST';
  19. echo "url_post ok!<br />\r\n";
  20. $this->req($vars);
  21. }
  22. function req($vars){
  23. $req='';
  24. if(is_array($vars)){
  25.  foreach($vars as $clef => $valeur){
  26.  $req .= urlencode($clef).'='.urlencode($valeur).'&';
  27. }
  28. $req = substr($req,0,-1); #pour kicker le char & en fin d'url
  29. }
  30. else{
  31. $req = $vars;}
  32. $this->post = $req;
  33. echo "req ok!<br />\r\n";
  34. }
  35. function envoi_req(){
  36. $envoi= "$this->methode $this->page HTTP/1.1\n" .
  37.  "Host: {$this->serveur}\n" .
  38.  "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.7.10) Gecko/20050717 Firefox/1.0.6
  39. \n" .
  40.  "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
  41. \n" .
  42.  "Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3\n";
  43. if(isset($this->moncookie)){
  44. $envoi .= "Cookie: ";
  45. foreach($this->moncookie as $clef => $valeur){
  46. $envoi .= "$clef={$valeur}; ";}
  47. }
  48. $envoi = substr($req,0,-1); #kicker le char ;
  49. $envoi .= "\r\n";
  50. if(isset($this->post)){
  51.  $envoi .=   "Content-type : application/x-www-form-urlencoded\n".
  52.     'Content-Length : ' . strlen($this->post) . "\n";
  53. }
  54. echo "envoi req ok!<br />\r\n";
  55. return $envoi . "\r\n";
  56. }
  57. function definir_moncookie($array){
  58. foreach($array as $clef => $valeur){
  59. $this->moncookie[$clef] = $valeur;}
  60. echo "envoi cook ok!<br />\r\n";
  61. }
  62. function execute(){
  63. if(!$fp = @fsockopen($this->serveur,$this->port,$errno,$errdescr)){
  64. echo 'echec connexion à '. $this->serveur . ' via le port ' . $this->port . '. Erreur récupérée: ' . $errno . ' - ' . $errdescr;
  65. return false;
  66. }
  67. else{
  68. echo "connex ok!<br />\r\n";
  69. socket_set_timeout($fp,30);
  70. $req = $this->envoi_req();
  71. fputs($fp,$req);
  72. while(!feof($fp)):
  73. $ligne = fgets($fp,4096);
  74. #echo $ligne;
  75. if(preg_match("#HTTP/([a-zA-Z0-9]+) ([0-9]{3}) (.+)#", trim($ligne), $infos)){
  76. $this->headers['http-version'] = $infos[1];
  77.  if(in_array((int)$infos[2], array(100, 200, 201, 302, 307))){
  78.  echo "requête effectuée avec succès.<br />\r\n"; #ouf
  79.  }
  80. }
  81. if(preg_match('`([^:]+?) :\s*(.+)`', $ligne, $get)){
  82. if(isset($this->headers[strtolower($get[1])])){
  83.  if(is_array($this->headers[strtolower($get[1])])){
  84.  $this->headers[strtolower($get[1])][] = trim($get[2]);
  85.  }
  86.  else{
  87.  $this->headers[strtolower($get[1])] = array($this->headers[strtolower($get[1])], trim($get[2]));
  88.  }
  89. }
  90. else{
  91. $this->headers[strtolower($get[1])] = trim($get[2]);
  92. }
  93. }
  94. endwhile;
  95. if(isset($this->headers['set-cookie'])){
  96. foreach($this->headers['set-cookier'] as $valeur){
  97.  if(preg_match('`([^=]+?)=([^;]*)`', $valeur, $recup)){
  98.  $this->recep_cookie[$recup[1]] = array('valeur' => $recup[2]);
  99.  }
  100.  if(preg_match('`expires=(.+)`', $valeur, $enreg)){
  101.  $this->recep_cookie[$recup[1]]['expires'] = strtotime($enreg[1]);
  102.  }
  103. }
  104. }
  105. }
  106. }
  107. }
  108. ?>


 
je DEBUTE la POO, soyez indulgent.  :D


Message édité par pmusa le 30-07-2005 à 10:13:02
Reply

Marsh Posté le 26-07-2005 à 23:25:44    

Et c'est quoi le probleme?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 27-07-2005 à 17:51:34    

le problème c'est que j'arrive à me connecter sans problème ( :D ) à mon interface membre, mais qu'après je ne peux pas accéder au formulaire sous pretexte que je ne suis pas loggué.  :pt1cable:  
bizarre, n'est-il pas?

Reply

Marsh Posté le 27-07-2005 à 19:32:25    

je me suis expliqué clairement, j'ai montrer des efforts de mon côté, en POO qui plus est, alors pitié... sortez moi de là.  :D  :(

Reply

Marsh Posté le 27-07-2005 à 19:37:55    

Ce que je fais quand ce genre de truc merde :  
Je fais le parcours avec FF une fois en enregistrant tout les packets envoyés avec ethereal ou un plugin, et apres je comparre a ce que mon bot envoie ... A la fin tu t'en sors toujours :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 27-07-2005 à 20:02:35    

ah ué pas kon. http://www.designlaboratory.net/smileyyyy/heink.gif
t'as des noms de plugins là? http://www.designlaboratory.net/smileyyyy/slurpt.gif

Reply

Marsh Posté le 27-07-2005 à 20:31:27    

Je crois que c'est LiveHTTPHeaders ou un truc du genre ...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 27-07-2005 à 20:33:09    

micfont999 a écrit :

Soit généralement des bot en C comme le font les modo sur ce site :)


qu'est ce que tu veux dire ?

Reply

Marsh Posté le 27-07-2005 à 20:44:18    

Que plusieurs modo (et non modo) ont des robot qui parcourrent le forum ...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 27-07-2005 à 20:56:57    

ok je vais téléchargé ça... en même temps que FF d'ailleursalors. :/ chui pas sur mon pc (HS)
 
en attendant, grosse connerier qui m'empêche de progresser:
 
Bad Request
Your browser sent a request that this server could not understand.
client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /mon_chemin/absolument_correct_pourtant/la_page.php
 
 
pmusa needs you.  :D  
http://stoptheaclu.org/images/I-Want-You.jpg
 
 

Reply

Marsh Posté le 27-07-2005 à 21:06:03    

esox_ch a écrit :

Que plusieurs modo (et non modo) ont des robot qui parcourrent le forum ...


et c'est pour faire quoi ces robots ?

Reply

Marsh Posté le 27-07-2005 à 21:18:11    

pour éviter qu'on dérive du sujet et qu'on m'aide à tourver une soluce.  :hello:  
 
supeyyr le plug-in. [:dawa]
 
j'envoi rien apparemment... 'comprend plus rien.  [:antp]

Reply

Marsh Posté le 27-07-2005 à 22:37:13    

Regarde dans le RFC correspondant ... a mon avi tu as foiré ta requete de GET :p


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 27-07-2005 à 23:00:52    

Ethereal bordel, Ethereal !!!
ce genre de bug est un truc qui se torche en 20 secondes chrono !!


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-07-2005 à 23:01:45    

pmusa >> tu prends mon plugin winamp dans ma signature, tu l'installes, et tu utilises Ethereal pour voir ce qu'il envoie. ça te fera un exemple d'utilisation


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-07-2005 à 23:43:37    

Harkonnen a écrit :

pmusa >> tu prends mon plugin winamp dans ma signature, tu l'installes, et tu utilises Ethereal pour voir ce qu'il envoie. ça te fera un exemple d'utilisation


 
Pas con l'histoire de ethereal, j'y aurais pas pensé, maintenant reste à savoir déchiffrer toutes ces petites données:)

Reply

Marsh Posté le 28-07-2005 à 00:07:56    

Harkonnen a écrit :

Ethereal bordel, Ethereal !!!
ce genre de bug est un truc qui se torche en 20 secondes chrono !!


 
Genre je lui ai proposé il y a 5 posts  [:adodonicoco]


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 28-07-2005 à 00:35:33    

esox_ch a écrit :

Genre je lui ai proposé il y a 5 posts  [:adodonicoco]


parce que tu crois que je lis tout ? :o

Reply

Marsh Posté le 28-07-2005 à 00:37:03    

micfont999 a écrit :

Pas con l'histoire de ethereal, j'y aurais pas pensé, maintenant reste à savoir déchiffrer toutes ces petites données:)


bah, y'a aucune difficulté :??:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed