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

  FORUM HardWare.fr
  Programmation
  C

  cURL : cliquer sur un bouton?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

cURL : cliquer sur un bouton?

n°1967891
JoZanmato
Posté le 21-02-2010 à 12:18:36  profilanswer
 

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!
 

mood
Publicité
Posté le 21-02-2010 à 12:18:36  profilanswer
 

n°1969081
404 Not Fo​und
人の夢は!!!終わらねェ
Posté le 25-02-2010 à 00:17:34  profilanswer
 

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


---------------
The death of human empathy is one of the earliest and most telling signs of a culture about to fall into barbarism. - Hannah Arendt
n°1969506
JoZanmato
Posté le 26-02-2010 à 00:06:58  profilanswer
 

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!

n°1969523
404 Not Fo​und
人の夢は!!!終わらねェ
Posté le 26-02-2010 à 03:02:02  profilanswer
 

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 ;)


---------------
The death of human empathy is one of the earliest and most telling signs of a culture about to fall into barbarism. - Hannah Arendt
n°1969536
JoZanmato
Posté le 26-02-2010 à 08:52:27  profilanswer
 

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).

n°1969670
404 Not Fo​und
人の夢は!!!終わらねェ
Posté le 26-02-2010 à 13:11:01  profilanswer
 

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]


---------------
The death of human empathy is one of the earliest and most telling signs of a culture about to fall into barbarism. - Hannah Arendt
n°1969691
JoZanmato
Posté le 26-02-2010 à 14:32:06  profilanswer
 

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.

n°1969721
404 Not Fo​und
人の夢は!!!終わらねェ
Posté le 26-02-2010 à 15:52:46  profilanswer
 

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


---------------
The death of human empathy is one of the earliest and most telling signs of a culture about to fall into barbarism. - Hannah Arendt
n°1969729
JoZanmato
Posté le 26-02-2010 à 16:04:02  profilanswer
 

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 )

n°1969747
404 Not Fo​und
人の夢は!!!終わらねェ
Posté le 26-02-2010 à 16:38:03  profilanswer
 

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

---------------
The death of human empathy is one of the earliest and most telling signs of a culture about to fall into barbarism. - Hannah Arendt
mood
Publicité
Posté le 26-02-2010 à 16:38:03  profilanswer
 

n°1969754
JoZanmato
Posté le 26-02-2010 à 16:49:34  profilanswer
 

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!

n°1969785
404 Not Fo​und
人の夢は!!!終わらねェ
Posté le 26-02-2010 à 19:23:48  profilanswer
 

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


---------------
The death of human empathy is one of the earliest and most telling signs of a culture about to fall into barbarism. - Hannah Arendt

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

  cURL : cliquer sur un bouton?

 

Sujets relatifs
PHP dans formulaire et $_POST je dois cliquer deux fois ...lien swf sur un bouton dans un clip
macro d'archivage par bouton sous conditionProbleme bouton retourne nul
afficher images ds certains div / choix bouton php(aide pour FLASH) mon clip en bouton
J2EE: Condition en JSP sur un boutonBouton Flash
Remplacer une bouton gif par un bouton flash?Insérer une image dans un bouton ! Pb de taille
Plus de sujets relatifs à : cURL : cliquer sur un bouton?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)