cURL : cliquer sur un bouton?

cURL : cliquer sur un bouton? - C - Programmation

Marsh Posté le 21-02-2010 à 12:18:36    

Bonjour à tous!
 
J'ai cherché sur le forum, mais je n'ai rien trouvé concernant mon problème, si il a déjà été traité je m'en excuse.
 
Je suis débutant en programmation et je rencontre un problème avec l'emploi de cURL. Je dois écrire mon programme en C, je n'ai pas droit au php ni au java.
 
J'aimerais employer cURL pour télécharger un fichier situé sur un site. A partir de l'URL du fichier je sais faire. Mais ici il faut cocher une choice box de type "radio" puis cliquer sur un bouton type "submit" et enfin (avec un navigateur internet en tout cas) accepter le téléchargement. Il s'agit donc d'une requête POST, ce qui est possible avec cURL.  
 
Voici le type de page en question: http://www.sciencedirect.com/scien [...] b7a79b58c8  
 
Sur cette page, les cases cochées par défaut sont les bonnes, il suffirait donc de cliquer sur "Export".
 
J'ai essayé pas mal de chose avec cURL, par exemple j'arrive à m'identifier sur ma boite mail via le code:
 

Code :
  1. curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "user=mon adresse mail&password=mon mot de passe" );
  2. curl_easy_setopt(curl, CURLOPT_URL, "adresse de ma boite mail" );


 
Si je suis connecté sur ma boite mail lorsque je lance le programme, je suis automatiquement déconnecté, preuve que cela fonctionne.
 
Le problème donc, c'est que pour une choice box de type "radio" il n'y a pas de champ texte à remplir... :/
 
J'ai créé un sondage bidon sur le net, qui est un exemple parfait de bouton "radio" + "submit", j'ai écrit un ptit programme sur la base de celui d'accès à ma boite mail:
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <curl/curl.h>
  4. #include <curl/types.h>
  5. #include <curl/easy.h>
  6. int main()
  7. {
  8.     CURL *curl;
  9.     CURLcode res;
  10.     curl=curl_easy_init();
  11.     curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); /* n'est pas vraiment nécessaire ici mais comme c'est utile au code final, je le met par réflexe */
  12.     curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookie.txt" ); /* idem */
  13.     curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "vote[81489]=0&submit=submit" ); /* le "submit" est-il vraiment nécessaire? */
  14.     curl_easy_setopt(curl, CURLOPT_URL, "http://www.123votez.com/sondages/sondage-gratuit-46535_81489.php" );
  15.     res=curl_easy_perform(curl);
  16.     curl_easy_cleanup(curl);
  17.     return 0;
  18. }


 
Quand j'exécute le programme, il me sort le code source de la page et le nombre de vote enregistré par mon sondage reste à 0...!
 
Je suis vraiment perdu là! j'ai cherché, fouillé les tutos cURL, etc mais je ne trouve rien, hormis quelques scripts php >_<
Bref, j'ai besoin d'aide!
 
Je vous remercie d'avance!
 

Reply

Marsh Posté le 21-02-2010 à 12:18:36   

Reply

Marsh Posté le 25-02-2010 à 00:17:34    

Essaie avec ça:
 

Code :
  1. struct curl_httppost *form_post_begin;
  2. struct curl_httppost *form_post_end;
  3. curl_formadd(&form_post_begin, &form_post_end, CURLFORM_COPYNAME, "name", CURLFORM_COPYCONTENTS, &name, CURLFORM_END);
  4. curl_formadd(&form_post_begin, &form_post_end, CURLFORM_COPYNAME, "password", CURLFORM_COPYCONTENTS, &password, CURLFORM_END);
  5. curl_easy_setopt(curl, CURLOPT_HTTPPOST, form_post_begin);


 
T'es certain que la page php ne limite pas les votes ? [:ocube]
 
Toutes les informations dont tu as besoin sont ici: http://curl.haxx.se/libcurl/c/libcurl-tutorial.html

Reply

Marsh Posté le 26-02-2010 à 00:06:58    

Bonsoir!
 
Tout d'abord merci de ta réponse!
Concernant ton lien, je me doute bien que toutes les réponses sont sur ces tutos, mais j'y ai passé du temps sans trouver la solution... :/
 
Ton code fait appel à des fonctions que je ne connais pas du tout, je ne sais pas comment l'intégrer. Il semblerait qu'il faille déclarer 2 structures, name et password, je me trompe?  
Ce code vise à s'identifier, comme pour une boite mail? J'ai remarqué que dans beaucoup de site, remplir un champ de recherche ou, comme ici, des identifiants, suffit à s'identifier/lancer la recherche, pas besoin de "cliquer" sur un bouton.
 
Euh la page php limite peut être les votes, mais il y aurais tout de même moyen de voter une fois, non? ^^  
 
Donc si les champs sont "name" = identifiant et "password" = mot de passe, on aurait un code du type:
 

Code :
  1. CURL *curl;
  2. struct curl_httppost *form_post_begin;
  3. struct curl_httppost *form_post_end;
  4. struct curl_httppost *password;
  5. struct curl_httppost *name;
  6. name="identifiant";
  7. password="mot de passe";
  8. curl=curl_easy_init();
  9. curl_formadd(&form_post_begin, &form_post_end, CURLFORM_COPYNAME, "name", CURLFORM_COPYCONTENTS, &name, CURLFORM_END);
  10. curl_formadd(&form_post_begin, &form_post_end, CURLFORM_COPYNAME, "password", CURLFORM_COPYCONTENTS, &password, CURLFORM_END);
  11. curl_easy_setopt(curl, CURLOPT_HTTPPOST, form_post_begin);
  12. curl_easy_setopt(curl, CURLOP_URL, "adresse du site" );
  13. curl_easy_cleanup(curl);


 
(ce code ne fonctionne pas en fait :/)
Si tu avais une idée? en tout cas merci et bonne soirée!

Reply

Marsh Posté le 26-02-2010 à 03:02:02    

Tout est expliqué en détails dans le howto au chapitre "HTTP POSTing".
Fais quand-même un effort :o
 

Code :
  1. char *post="outil=marteau&couleur=rouge";
  2. CURL *curl=curl_easy_init();
  3. curl_easy_setopt(curl, CURLOPT_URL, "http://www.site.com/test.php" );
  4. curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post);
  5. curl_easy_perform(curl);
  6. curl_easy_cleanup(curl);


 
Si test.php contient:

Code :
  1. <?
  2. echo($_POST['outil'].$_POST['couleur']);
  3. ?>


La requête répond "marteaurouge".
 
Pour décortiquer le site/formulaire sur lequel tu veux faire les requêtes, je te conseille d'utiliser Firefox avec l'extension Firebug ;)

Reply

Marsh Posté le 26-02-2010 à 08:52:27    

Bonjour,
merci de ta réponse rapide.
 

Citation :

Tout est expliqué en détails dans le howto au chapitre "HTTP POSTing".


 
Sans doutes, et comme je l'ai dit j'y ai passé du temps. Je sais faire certaine requête post, mais je ne trouve rien concernant les choix radio ou submit.
 

Citation :

Fais quand-même un effort :o


 
Merci de ne pas juger trop rapidement...
Le code que tu proposes est certes intéressant, mais il ne m'aide pas vraiment. Il s'agit d'une requête post simple que je sais déja faire. Comme je l'ai dit j'arrive par exemple à m'identifier sur ma boite mail... Envoyer une requête du type "name" = "value" n'est pas un problème (un coup d'oeil au code source, ou, en étant fainéant, via Firebug), excepté dans le cas RADIO ou SUBMIT...
 
Le monde de la programmation est amusant, sur chaque forum, la seule réponse que j'obtiens est "go chercher les tutos cURL".
 
Merci tout de même, si tu as d'autres idées  je suis preneur (sauf pour "Google est ton ami" bien-sûr).

Reply

Marsh Posté le 26-02-2010 à 13:11:01    

JoZanmato a écrit :

Envoyer une requête du type "name" = "value" n'est pas un problème (un coup d'oeil au code source, ou, en étant fainéant, via Firebug), excepté dans le cas RADIO ou SUBMIT...


Ton problème n'a rien à voir avec la libcurl dans ce cas.
Tu dois te renseigner sur les formulaires.
Les <input> de type radio et submit fonctionnent en effet aussi avec une paire name="value" [:spamafote]
 

JoZanmato a écrit :

Le monde de la programmation est amusant, sur chaque forum, la seule réponse que j'obtiens est "go chercher les tutos cURL"

 
Les gens ne te font pas cette réponse pour t'embêter mais pour te pousser à acquérir la compétence de base.
 
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toute sa vie. [:404 not found:1]

Reply

Marsh Posté le 26-02-2010 à 14:32:06    

J'entends bien.
En fait si j'en suis venu à poster sur les forum c'est que je suis complètement bloqué. J'ai réellement cherché pendant longtemps, lu et relu les tutos, manuels et code sources fourni de cURL.  
Je ne cherche pas de travail tout fait bien sur, mais au moins des pistes, des infos...  
 
A priori le problème ne viendrait pas de cURL, peut être n'est-ce simplement pas possible? Ou du moins pas en C.

Reply

Marsh Posté le 26-02-2010 à 15:52:46    

C'est quoi l'url de ton formulaire et script de test ?

Reply

Marsh Posté le 26-02-2010 à 16:04:02    

Mon formulaire se trouve à cette adresse par exemple:
 
http://www.sciencedirect.com/scien [...] 0859d57b86  
 
Qu'entends-tu par script de test? mon code? l'adresse du sondage? ( http://www.123votez.com/sondages/s [...] _81489.php )

Reply

Marsh Posté le 26-02-2010 à 16:38:03    

Ca sert clairement à rien de t'attaquer à un truc aussi complexe que la page sur sciencedirect.com sans avoir un minimum d'expérience. T'es plus dans le cadre d'un simple POST: y'a du javascript qui altère le contenu de la page avec plein de variables (les input type hidden) qui est lui-même généré côté serveur. Pouvoir obtenir ce que tu veux en une seule requête (si c'est possible) impliquerait de comprendre le fonctionnement du site.  
 
Même le sondage, j'ai vite essayé un submit en envoyant les radio, il me répond qu'il lui manque un input (pollerID) que j'ai pas réussi à trouver ...
 
Tu devrais faire un formulaire et un simple script php qui t'affiche les éléments que ton formulaire POST, le temps de te familiariser avec cURL.


Message édité par 404 Not Found le 26-02-2010 à 16:39:27
Reply

Marsh Posté le 26-02-2010 à 16:38:03   

Reply

Marsh Posté le 26-02-2010 à 16:49:34    

Et bien je te remercie de ces informations!
 
En effet le problème est bien complexe, mais ce n'est pas moi qui ai inventé le sujet. N'ayant aucune connaissance en java et en php, et n'ayant de toute façon pas le droit de les utiliser, je pense qu'on peut en conclure que le sujet n'est pas réalisable, du moins à mon niveau.
 
C'est un peu dommage mais ca fait trop longtemps que je m'acharne sans aucuns résultats :/
 
Je te remercie de m'avoir aidé et te souhaite une bonne soirée!

Reply

Marsh Posté le 26-02-2010 à 19:23:48    

C'est techniquement possible d'y arriver, mais ça peut demander beaucoup de temps ...
Désolé de ne pas pouvoir faire plus pour toi.
 

Reply

Sujets relatifs:

Leave a Replay

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