Soumission automatique de formulaires Curl et PHP

Ecrit par admin le Mercredi 13 février 2008 à 4:19 - Catégorie Scripts PHP, Outils référencement

Comment soumettre ou remplir des formulaires automatiquement avec Curl et PHP ?

Pour soumettre des données automatiquement à un formulaire, il faut dans un premier temps récupérer les informations obligatoires à saisir. Pour cela, on regarde le code source du formulaire et on extrait les champs à soumettre (on pourrait automatiser cette étape mais ce n’est pas l’objet de cet article).

On peut aussi utiliser l’extension webdeveloper pour Firefox, celle-ci permet de convertir un formulaire POST en GET et donc de voir les variables à passer directement dans l’url :

Convertir post en get avec web developer Firefox

Cliquez ici pour télécharger cette extension indispensable.

Comment procéder pour remplir un formulaire de façon automatique en lancant un simple script PHP ?

Nous allons utiliser la librairie Curl, supportée par PHP. Curl va nous permettre de soumettre des données de façon automatique tout type de formulaires, commentaires de blogs, annuaires, forums et tout site web ayant des formulaires permettant de laisser des commentaires, messages ou autre…

Nous allons prendre l’exemple d’un formulaire de soumission de sites dans un annuaire comprenant les champs suivants :

- Catégorie
- Nom
- Email
- Nom du site
- Adresse web
- Description du site
- Ascreen ou image miniature du site

Ces champs sont souvent rencontrés lorsqu’on inscrit un site web dans un annuaire.

Exemple fictif de formulaire de soumission que l’on rencontre lorsque l’on soumet un site dans un annuaire :


Tous les champs sont obligatoires !















Le code source du formulaire ci-dessus pour récupérer les champs qui nous intéresse :

  1.  
  2. <form id="soumet" action="<?php echo htmlentities($_SERVER[’PHP_SELF’]); ?>" method="post" name="form2submit">
  3. <fieldset>
  4. <legend>Tous les champs sont obligatoires !</legend>
  5. <input type="hidden" name="action" value="submit" />
  6. <select name="id_cat">
  7. <option value=0>Liste catégories</option>
  8. <option value=0>————————–</option>
  9. <option label="Annuaires référencement " value=7>Annuaires référencement</option>
  10. <option label="Blogs référencement " value=6>Blogs référencement</option>
  11. <option label="Concours de référencement " value=4>Concours de référencement</option>
  12. <option label="Forums référencement " value=2>Forums référencement</option>
  13. <option label="Inclassables " value=8>Inclassables</option>
  14. <option label="Outils référencement " value=1>Outils référencement</option>
  15. <option label="Prestataires référencement " value=5>Prestataires référencement</option>
  16. <option label="Sites web Référencement " value=3>Sites web Référencement</option></select>
  17.  
  18.  
  19.  
  20. <label>Votre nom :   </label>
  21. <input type="text" name="nom_proprio" maxlength="50" size="53" value="" />
  22.  
  23. <label>Votre email :   </label>
  24. <input type="text" name="email_proprio" maxlength="75" size="53" value="" />
  25.  
  26. <label>Titre du site :   </label>
  27. <input type="text" name="titre" maxlength="50" size="53" value="" />
  28.  
  29. <label>Url du site :   </label>
  30. <input type="text" name="url" maxlength="150" size="53" value="http://" />
  31.  
  32. <label>Url image :</label>
  33. <input type="text" name="url_image" maxlength="150" size="53" value="http://" />
  34.  
  35.  
  36.  
  37. <label>Description du site
  38.  
  39. </label>
  40. <textarea name="description" cols="50" rows="5"></textarea>
  41.  
  42.  
  43. <input id ="go" type="submit" value="Soumettre le site" />
  44. </fieldset>
  45. </form>

On doit donc récupérer les champs suivants :

action
nom_proprio
email_proprio
titre
url
url_image
description
id_cat

Voici le code php qui va envoyer les données automatiquement à l’aide de Curl :

Ici on choisi de soumettre dans la catégorie blog référencement (catégorie N°6), on pourrait là encore extraire toutes les catégories, les mettre en bdd et faire une recherche par mot-clé sur ces catégories pour récupérer l’id qui nous intéresse, les techniques différent quant à la récupération de ces catégories, tout dépend aussi si on veut faire de l’automatique ou du semi-automatique, on peut en discuter au pied de cet article.

  1. <?php
  2. $postfields = array();
  3. $postfields["action"] = "submit";
  4. $postfields["nom_proprio"] = "Tiger";
  5. $postfields["email_proprio"] = "none@none.com";
  6. $postfields["titre"] = "Techniques referencement";
  7. $postfields["url"] = "http://www.seoblackout.com/";
  8. $postfields["url_image"] = "http://www.seoblackout.com/ascreen.jpg";
  9. $postfields["description"] = "SEO BlackOut est dédié aux techniques de référencement et de positionnement de sites web.";
  10. $postfields["id_cat"] = "6";
  11. //$postfields["add2newsletter"] = "1";
  12. //url de la page de soumission
  13. //ici mon annuaire (qui a un captcha donc inutile de tenter la soumission auto, c’est pour l’exemple)
  14. $url = "http://www.netdeveloppeur.com/annuaire/suggerer_site.php?action=meta_pass&id_cat=0";
  15. $useragent = "Mozilla/5.0";
  16. $referer = $url;
  17.        
  18. //Initialise une session CURL
  19. $ch = curl_init($url);
  20. //CURL options
  21. curl_setopt($ch, CURLOPT_POST, 1);
  22. //On poste les données du tableau $postfields
  23. curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
  24. //On définit un useragent ici Mozilla/5.0
  25. //souvent les bots se font passés pour googlebot ce qui finalement est stupide
  26. //On passe donc un useragent banal
  27. curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  28. //On passe un referrer ici on passe la même page $url
  29. curl_setopt($ch, CURLOPT_REFERER, $referer);
  30. //on récupère le contenu de la page de résultat de la soumission dans une chaine
  31. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  32. // en cas de redirection (facultatif ici)
  33. //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  34. //Page de résultats et fermeture de session
  35. $result = curl_exec($ch);
  36. curl_close($ch);
  37.  
  38. //on peut faire un echo du résultat obtenu
  39. echo $result;
  40. ?>

 

Explications du code :

CURLOPT_POST : permet d’utiliser la méthode POST à la place de la méthode GET qui est la méthode par défaut.

CURLOPT_POSTFIELDS : Les données à envoyer par la méthode POST sous la forme d’une chaîne (doivent être encodées) ou d’un tableau associant le nom du champ à sa valeur (cas ici).

CURLOPT_USERAGENT : Défini l’en-tête User-Agent pour la requête HTTP.

CURLOPT_REFERER : Renseigne l’en-tête Referer, la page d’où on provient en temps normal.

CURLOPT_RETURNTRANSFER : le contenu de la page distante est retourné sous la forme d’une chaîne par la fonction curl_exec.

CURLOPT_FOLLOWLOCATION permet de suivre les redirections de type “Location:”.

En savoir plus sur Curl et PHP.

Ces icones representent les sites de bookmarking social dans lesquels vos lecteurs peuvent partager et faire découvrir vos pages.
  • Scoopeo
  • Digg
  • Technorati
  • del.icio.us
  • blogmarks
  • BlogMemes Fr
  • Fuzz
  • Nuouz
  • Pioche
  • StumbleUpon
  • Tapemoi
  • Tutmarks
  • Wikio
  • Linkertop
  • Netscape
  • Bruxello
  • Blogasty

Catégorie: Scripts PHP, Outils référencement


35 Commentaires

Commentaire par Aurélien (4 commentaires)

Mercredi, 13 février , 2008 à 14:06

Hello Paul !

Tu vas faire des heureux avec ce post, je pense.

Commentaire par kickass (1 commentaire)

Mercredi, 13 février , 2008 à 14:48

ouai pas mal l’article, je vais grandement m’en inspiré :)
Mais je suis blocker par un truc (alors peut être que j’en demande trop à mon script) :

mais peut-on faire un script qui va lancer une requête google, puis parcourir les site du résultat 1 à 1 .
Pendant la boucle qui parcours les site 1 à 1 , on peut ensuite utiliser ton code :)

Commentaire par Julien (8 commentaires)

Mercredi, 13 février , 2008 à 15:48

Hmmm, merci beaucoup.
Je vais voir pour tester ça ^^

Commentaire par Acidifié (12 commentaires)

Mercredi, 13 février , 2008 à 16:26

Cool et vraiment puissant!
Moi, je rajouterais un petit truc pour parser le de la description et choisir, selon un masque, la catégorie qui correspond le mieux…

Commentaire par alex de Referencement Blog (11 commentaires)

Mercredi, 13 février , 2008 à 19:52

Salut Paul,

Va encore y avoir du spam d’annuaire :D

Commentaire par Bert (1 commentaire)

Jeudi, 14 février , 2008 à 5:38

Woola je découvre totalement et j’ai directement accroché sur “webdeveloper pour Firefox, celle-ci permet de convertir un formulaire POST en GET”.

Alors rien que ça, c’est que du bonheur ;)

Commentaire par Bert

Jeudi, 14 février , 2008 à 5:47

Edit : Arf, mince je n’ai pas réussi à faire ce que j’voulais : choper l’URL avec l’ID de mon site en paramètre pour squatter quelques sections “boost” des annuaires freeglobes. Quelqu’un a une solution ?

J’ai tenté -http://demo.freeglobes.net/index.php?id=IDdeMonSite&action=update ou -http://demo.freeglobes.net/index.php?do=boost&id=IDdeMonSite&action=update mais ça ne passe pas

Commentaire par admin

Jeudi, 14 février , 2008 à 6:30

@ Bert, regarde cet article : Spam top hits top votes, ça devrait répondre à ta question ;)

Commentaire par Bert

Jeudi, 14 février , 2008 à 15:37

Je connais cet article ;)

Moi je veux juste automatiser le processus de soumission sur boost.html, afin de m’affranchir de la saisie de l’ID (donc de gagner du temps).

Commentaire par admin

Jeudi, 14 février , 2008 à 19:13

Heu j’ai rien compris je crois :lol:

Voilà ce que j’ai compris :

Ton site est déjà inscrit dans des annuaires freeglobes et tu souhaites récupérer automatiquement l’id de ton site pour ensuite toujours de façon automatique booster ton site sur les pages top votes et top visites des annuaires où ton site est inscrit, c’est bien ça ?

Commentaire par Bert

Jeudi, 14 février , 2008 à 19:25

C’est presque ça.

Je connais l’ID de mes sites, no problem.

Je ne veux pas apparaître sur les pages top votes ou top visites mais sur toutes les pages, via le screenshot + title souvent présent en haut à gauche et nommé “Top Site”.

Pour ce faire, faut se rendre par exemple sur -http://demo.freeglobes.net/boost.html et renseigner manuellement l’ID de son site.

Ce que je recherche, c’est d’inclure l’ID de mon site dans l’URL pour qu’au clic ça place directement mon site dans le “Top Site” et qu’ainsi ça m’épargne l’étape manuelle.

Serait-ce plus clair ? ;)

Commentaire par admin

Jeudi, 14 février , 2008 à 19:26

Kickass :

mais peut-on faire un script qui va lancer une requête google, puis parcourir les site du résultat 1 à 1 .
Pendant la boucle qui parcours les site 1 à 1 , on peut ensuite utiliser ton code

Oui on peut, tu parcoures les pages de Google une à une et tu extrais chaque url, je te conseille de les mettre en bdd (je publie un article dans la nuit avec le code qui permet d’extraire les urls de Google ;) ). Tu extrais ensuite pour chaque url, la page de soumission et là tu peux utiliser le code présenté dans l’article, mais tu devras aussi régler le souci du choix de la catégorie, ou alors tu extrais pour chaque annuaire toutes les catégories et id de catégorie et tu mets en bdd aussi. Tu vas ensuite faire une recherche et ressortir uniquement les annuaires qui ont la catégorie souhaitée, si plusieurs catégories avec le même mot (blogs référencement et annuaire référéncement par exemple), ça pose souci. Plusieurs choix possibles, on peut choisir la première catégorie trouvée, on peut choisir la dernière ou alors on ajoute dans notre script la possibilité de choisir celle que l’on souhaite…

Commentaire par admin

Jeudi, 14 février , 2008 à 19:45

@ Bert : Ok je comprends mieux :lol: je teste et poste le script dans la nuit ;)

Commentaire par Bert

Jeudi, 14 février , 2008 à 19:52

Yeah, you’re a boss cher Paul ;)

Commentaire par admin

Jeudi, 14 février , 2008 à 20:29

Ok voici le script :

<?php
$postfields = array();
$postfields["action"] = "update";
//id_google
$postfields["id"] = "45";
$postfields["submit"] = "OK";
$url = "http://demo.freeglobes.net/index.php?do=boost";
$useragent = "Mozilla/5.0";
$referer = $url; 
	
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);

echo $result;
?>

Commentaire par Bert

Jeudi, 14 février , 2008 à 20:42

Ha yes, excellent, merci beaucoup ;)

Commentaire par Bilel (3 commentaires)

Vendredi, 15 février , 2008 à 8:26

Ca me rappelle mes Gadgets associés à ma toolbar pour l’envoi automatique vers quelques annuaires automatiques !

Mais, sincèrement l’envoi en masse me fait peur du Sandbox :-)

Commentaire par admin

Vendredi, 15 février , 2008 à 18:14

Tu peux faire de l’envoi de masse, les webmasters d’annuaire ne valident pas tous au même moment…

Commentaire par karl (1 commentaire)

Dimanche, 17 février , 2008 à 23:20

Quel générosité, c’est le genre de script que j’aurais gardé pour moi :-)

Commentaire par DispoWeb (1 commentaire)

Mardi, 19 février , 2008 à 2:23

héhé le bonheur des uns fait le malheur des autres :P
Bravo pour l’article Tiger ;)

Commentaire par Didier_S

Mercredi, 27 février , 2008 à 19:44

Bravo pour ce joli récap, Tiger!

Je me permets d’insister sur un point: toujours essayer de changer son user-agent quand on se sert de curl , celui par défaut est de la forme “User-Agent: curl/x.xx.x”… et on n’est rarement sensé soumettre des forms automatiquement ;)

Commentaire par vince

Jeudi, 6 mars , 2008 à 7:38

Tu pourrais citer tes sources même si tu as fait du remachage:

-http://www.slightlyshadyseo.com/?p=43

Commentaire par admin

Jeudi, 6 mars , 2008 à 15:05

Espèce de gros naze, tu mériterai que je ne publie pas ton commentaire, je ne me suis aucunement inspiré de cet article, ça fait plusieurs années que je pratique l’autosubmit, j’ai même donné mes scripts à des amis qui pourront témoigner ici si je leur demande. La prochaine fois avant de faire ton malin regarde bien les 2 articles. Sur ce j’ai ton ip je t’identifierai assez tôt ;)

Commentaire par admin

Jeudi, 6 mars , 2008 à 15:06

Je me prend la tête à faire mes propres articles, et c’est pour ça que j’en publie pas beaucoup d’ailleurs, sinon j’irai pomper chez les ricains et à coup de trads, je pourrai en pondre des centaines comme le font plein de gars. Et maintenant voilà qu’un pauvre naze anonyme vient me prendre la tête, au fait tu sais qu’il y en a plein des articles sur Curl et la soumission auto et ce depuis des années ? t’aurai pu au moins choisir un article plus proche du mien que celui de XMPC. Sur ce dégage de mon site et ne revient pas. Je mets ici ton ip : 85.1.177.104 et je vais fouiller mes logs maintenant, on va voir qui est ce courageux anonyme et d’où il vient…

Commentaire par admin

Jeudi, 6 mars , 2008 à 16:26

Ok un peu plus de détails sur toi :
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)

Tu sais aussi te faire passer pour googlebot :

85.1.177.104|6March2008|http://who-hosts.com/www.seoblackout.com|Googlebot 2,1

et tu utilises firefox aussi :

Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12

Je vais pouvoir facilement te retrouver mon grand, j’espère que tu ne fréquentes pas seosphere :lol:

Tu peux toujours me mail pour t’excuser…

Commentaire par admin

Jeudi, 6 mars , 2008 à 16:45

Ok je viens de t’identifier complètement, j’en suis sûr à 99 %, maintenant je vais te pièger pour avoir du 100 %. Au fait aides-moi, t’as bien un blog ? et ya le mot web-m.. dans le nom de domaine :lol:

Et je suppose que c’est suite à un de mes commentaires sur ton blog, que tu viens ici essayer je ne sais quoi, j’ai tord ?

Pour te retrouver pas besoin d’ip, Vince m’a largement suffit avec un peu de Google, la prochaine fois change aussi le pseudo mon grand ;)

EDIT 7 mars, je me suis trompé, je sais maintenant qui tu es et je suis déçu, c’est pas sweet…. contrairement au nom de ton blog :(

Commentaire par Julien (5 commentaires)

Mardi, 18 mars , 2008 à 14:16

Ecoute, ton script est tout simplement excellent!

Je ne te remercierai jamais assez! (J’te fais de la lêche parce qu’apparemment, faut pas trop t’énerver _ cf ci dessus lol)

Sérieusement, c’est le script rêvé pour tout référenceur, un grand merci pour ton travail.

Le seul truc qui me gêne c’est pour les captchas. Est-ce que tu connais un moyen de préremplir le formulaire par exemple, et qu’il reste juste à rentrer le captcha, appuyer sur le bouton “soumettre” et voilà… ? A noter que j’ai lu ton article sur le contournement des captchas, là c’est un peu fastidieux et aléatoire quand même…

Pour le moment je m’en sors avec un simple bouton “copy to clipboard”, un peu plus long mais le travail est déjà bien mâché.

Commentaire par Julien (5 commentaires)

Mardi, 18 mars , 2008 à 15:48

J’ai trouvé ^^

curl_setopt($ch, CURLOPT_POST,1)

Mettre un 0 à la place du 1 :-D

Commentaire par Christophe

Mercredi, 30 avril , 2008 à 20:01

Bonjour, votre script est très utile, cependant dans mon cas je dois pouvoir m’authentifier d’abord puis aller poster mon annonce (le site sur lequel je poste supprime les annonces après 24h ce qui m’oblige à la remettre à la main tous les matins :( )

Dois je juste doubler votre code ?

1 / submit sur l’authentification
2 / submit sur la page des annonces

Merci pour votre aide !

Commentaire par admin

Jeudi, 1 mai , 2008 à 2:36

Bonjour Christophe, ça doit être lié à une histoire de cookies, si vous voulez, vous pouvez m’envoyer l’adresse web par mail pour que je regarde si c’est complexe ou pas à développer.

Commentaire par nat

Dimanche, 4 mai , 2008 à 0:36

Bonjour,

cela fait un petit moment que je me perds sur ce blog … enfin ..je me perds dans un certain plaisir à voir toutes ces astucieuses réflexions… en revanche depuis un petit moment je constate assez régulièrement que certains viennent essentiellement dans l’intention d’agresser l’auteur … se cachent derriere une fausse Ip … je ne savais pas que le référencement était un monde de requins… je suis surprise … Jalousie ? Ou Cupidité ?

Bref parfois je regrette que mon niveau de prog soit si bas parce que je trouve tous ces scripts stimulants .

Commentaire par admin

Dimanche, 4 mai , 2008 à 20:15

Merci nat pour ton message qui fait plaisir :)

Concernant le souci que j’ai eu avec vince (cf commentaires ci-dessus) c’est réglé, il m’a mailé pour s’excuser et donc le sujet est clos. Peut-être que je me suis emporté aussi et que j’aurai dû simplement ne pas valider son message et passer à autre chose, mais sur le coup, cette intervention m’avait profondément énervé…

Concernant ton niveau de prog. n’hésites pas à demander quand tu ne sais pas, si je peux te répondre je le ferai, je ne suis pas non plus un bon dév. juste un bidouilleur qui arrive à ses fins…

Commentaire par nat (nouveau commentaire)

Mardi, 6 mai , 2008 à 4:31

je sais il est tard …et j’entends d’ici vos questions ..mais que fait elle sur un blog si sulfureux à cette heure ci !!!??? Insomnie et internet font très bon ménage …Bref il est 3h00 du mat et j’installe une p’tite extension qui scanne le document et me donne la liste des mots clés , ses répétitions et son poids .. jusqu’à maintenant rien d’extraordinaire … Je vais sur Google pour tester et je tape “référencement” … normal …le soit disant ref rapide squatte toujours la première place ( entre parenthèses le graphisme est nul, sémantique d’un enfant de 10 ans … bref cela va à l’encontre de toutes les règles) … puis je descend mon regard et je clique sur (le mot clé en question).espace2001.com (vais pas faire un lien non plus !) et là … il faut que vous éclairiez ma lanterne ! Si j’étais une internaute (féminin quand tu nous tiens) je trouverais le site a c…. Bon passons … ma curiosité piquée .. Je regarde le nombre de pages indexées et là surprise 3 sur google et 18 sur yahoo ! Impossible une requête si concurrentielle : 5ieme position sur Google ! 603 liens pointant sur ce domaine sur Google et 42 558 selon Google ! je comprends mieux mais comment est ce possible ??? Que quelqu’un m’explique …

Il est 3h44 …. je vous souhaite une bonne journée …

PS : pour la répétition : “search” 182 fois, engine “46″ fois, et “référencementé 9 fois !

Commentaire par nat (nouveau commentaire)

Mardi, 6 mai , 2008 à 4:33

désolé pour les paragraphes .. il est tard .. et c’est 45 558 selon yahoo bien sur .

Commentaire par boris (nouveau commentaire)

Vendredi, 9 mai , 2008 à 12:48

Bonjour et merci pour ce script dont je me suis inspiré pour un site que je developpe.

Je me permet de poser une question pour régler un problème qui n’a pas beaucoup de rapport mais dont la solution est peut-être avec curl.

J’ai un menu sur mon site (frame1) dont les liens changent le contenu de la 2éme frame (grâce a ajax), contenu pouvant se trouver sur un autre serveur.

Le problème est qu’une page requiert une authentification, j’ai accès aux login et mdp sur ma bdd, j’applique donc ton script sur le lien externe, cela a l’air de marcher, mais toute la css, liens intra-site et cie ne marchent pas…

Est-ce normal? Qu’est ce que je n’ai pas compris ?

Merci beaucoup.

Laisser un commentaire

XHTML: Vous pouvez utiliser les tags suivants: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>



SEO BLACKOUT

Site web dédié aux techniques de référencement et de positionnement de sites web.
Certaines parties du site sont en accès restreint, ces espaces sont réservés à la SEO Black Hat Team.


Don't Be Evil !