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 :

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 :
Le code source du formulaire ci-dessus pour récupérer les champs qui nous intéresse :
-
-
<form id="soumet" action="<?php echo htmlentities($_SERVER[’PHP_SELF’]); ?>" method="post" name="form2submit">
-
<fieldset>
-
<legend>Tous les champs sont obligatoires !</legend>
-
<input type="hidden" name="action" value="submit" />
-
<select name="id_cat">
-
<option value=0>Liste catégories</option>
-
<option value=0>————————–</option>
-
<option label="Annuaires référencement " value=7>Annuaires référencement</option>
-
<option label="Blogs référencement " value=6>Blogs référencement</option>
-
<option label="Concours de référencement " value=4>Concours de référencement</option>
-
<option label="Forums référencement " value=2>Forums référencement</option>
-
<option label="Inclassables " value=8>Inclassables</option>
-
<option label="Outils référencement " value=1>Outils référencement</option>
-
<option label="Prestataires référencement " value=5>Prestataires référencement</option>
-
<option label="Sites web Référencement " value=3>Sites web Référencement</option></select>
-
-
-
-
<label>Votre nom : </label>
-
<input type="text" name="nom_proprio" maxlength="50" size="53" value="" />
-
-
<label>Votre email : </label>
-
<input type="text" name="email_proprio" maxlength="75" size="53" value="" />
-
-
<label>Titre du site : </label>
-
<input type="text" name="titre" maxlength="50" size="53" value="" />
-
-
<label>Url du site : </label>
-
<input type="text" name="url" maxlength="150" size="53" value="http://" />
-
-
<label>Url image :</label>
-
<input type="text" name="url_image" maxlength="150" size="53" value="http://" />
-
-
-
-
<label>Description du site
-
-
</label>
-
<textarea name="description" cols="50" rows="5"></textarea>
-
-
-
<input id ="go" type="submit" value="Soumettre le site" />
-
</fieldset>
-
</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.
-
<?php
-
$postfields["action"] = "submit";
-
$postfields["nom_proprio"] = "Tiger";
-
$postfields["email_proprio"] = "none@none.com";
-
$postfields["titre"] = "Techniques referencement";
-
$postfields["url"] = "http://www.seoblackout.com/";
-
$postfields["url_image"] = "http://www.seoblackout.com/ascreen.jpg";
-
$postfields["description"] = "SEO BlackOut est dédié aux techniques de référencement et de positionnement de sites web.";
-
$postfields["id_cat"] = "6";
-
//$postfields["add2newsletter"] = "1";
-
//url de la page de soumission
-
//ici mon annuaire (qui a un captcha donc inutile de tenter la soumission auto, c’est pour l’exemple)
-
$url = "http://www.netdeveloppeur.com/annuaire/suggerer_site.php?action=meta_pass&id_cat=0";
-
$useragent = "Mozilla/5.0";
-
$referer = $url;
-
-
//Initialise une session CURL
-
$ch = curl_init($url);
-
//CURL options
-
curl_setopt($ch, CURLOPT_POST, 1);
-
//On poste les données du tableau $postfields
-
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
-
//On définit un useragent ici Mozilla/5.0
-
//souvent les bots se font passés pour googlebot ce qui finalement est stupide
-
//On passe donc un useragent banal
-
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
-
//On passe un referrer ici on passe la même page $url
-
curl_setopt($ch, CURLOPT_REFERER, $referer);
-
//on récupère le contenu de la page de résultat de la soumission dans une chaine
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
-
// en cas de redirection (facultatif ici)
-
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
-
//Page de résultats et fermeture de session
-
$result = curl_exec($ch);
-
curl_close($ch);
-
-
//on peut faire un echo du résultat obtenu
-
echo $result;
-
?>
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.
Catégorie: Scripts PHP, Outils référencement
- Ajouter cet article à :
- Del.icio.us -
- Digg
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
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
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
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 ![]()
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
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
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
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.
















