Partage
  • Partager sur Facebook
  • Partager sur Twitter

Remplissage et envoi automatique de formulaires

    16 mars 2008 à 22:22:16

    Bonjour,
    je voudrais savoir s'il y avait une fonction en C++ permettant d'envoi des données à un formulaire web HTML. En d'autres termes ca veut dire de pour voir envoyer des données dans les champs d'un formulaire d'un site distant (par exemple l'espace de connexion du site du zero).
    Comment remplir les champs du formulaire et puis envoyer celui-ci ? Par exemple j'entre mon login dans le champ qui convient et je l'envoi pour me connecter. Même chose pour le mot de passe...
    Donc comment faire ? Faut-il utiliser CGI (même si sais pas vraiment ce que c'est) ou autre chose... ?
    Merci d'avance ;)
    • Partager sur Facebook
    • Partager sur Twitter
      17 mars 2008 à 13:42:31

      Je ne sais pas trop mais je dirais les entêtes HTTP mais je ne crois qu'avec cela tu pourras savoir les nom de chaque <input ..../>
      • Partager sur Facebook
      • Partager sur Twitter
        17 mars 2008 à 17:47:29

        En fait ce n'est pas la peine trouver le nom du champ puisque dans cet exemple on le connaitra mais le plus dur sera la partie remplissage envoi des données vers une page. Donc comment peut-on envoyer des information avec la méthode POST vers une url précise ? Pour qu'à la suite le code PHP puisse prendre ces informations envoyés :
        1. <?php
        2. echo $_POST['nom']; // pas sécurisé mais bon ce n'est qu'un exemple..
        3. ?>

        Donc j'attends vos réponses ;) ...
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          17 mars 2008 à 17:58:37

          salut,
          va voir le tuto sur les sokets si ca peux t'aider,
          ou sinon avec des requetes batch (en utilisant system("requete")
          • Partager sur Facebook
          • Partager sur Twitter
            17 mars 2008 à 21:02:53

            J'avais déjà commencer ce tuto sur les sockets et la je crois que je vais le reprendre mais j'ai pas trouver le tuto sur les requêtes batch. Mais est-ce qu'on peut envoyer des données par méthodes POST avec les sockets ? Et peut-on utiliser les sockets en C++ ?
            • Partager sur Facebook
            • Partager sur Twitter
              17 mars 2008 à 21:08:42

              salut,

              il faudra que tu voit les socket afin de pouvoir envoyer quelque chose au serveur et de t'y connecter.

              ensuite, il y a les requêtes http qu'il faudra que tu envoie, puis que tu reçoive, que tu analyse et que tu renvoie les données voulues.

              pour les socket, QT est pas mal a ce qu'il parait, personnellement je viens de m'y mettre et je trouve ça incomparablement plus simple que le C.
              pour le requêtes http, il y a un tuto sur le site.

              a+
              hedi07
              • Partager sur Facebook
              • Partager sur Twitter
                17 mars 2008 à 21:13:13

                En fait j'ai pas trouvé le tuto sur les requêtes HTTP est-il dans les tutos officiels ou dans les non-officiels ?
                Deuxième pourais-je avoir un exemple de code en C++ sans Qt ? Et aussi avec Qt ?

                • Partager sur Facebook
                • Partager sur Twitter
                  17 mars 2008 à 21:24:05

                  il est dans les non officiel, mais je sais plus ou. et pour les exemple de code => google et la doc.

                  a+
                  hedi07
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 mars 2008 à 21:36:54

                    J'ai trouvé sur d'autres forum une librairie libCurl, est-ce qu'elle peut m'aider ou non ?
                    Et peut-on le faire sans librairie comme libCurl puisque je veut faire ça justement pour faire une librairie qui ne sera pas faites exactement pour ça mais qui aura besoin de ca.
                    Donc quelqu'un aurait-il un code C++ de préférence sans librairies (ni Qt, ni libCurl,...) ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 mars 2008 à 11:27:36

                      Salut.
                      Si ça peut t'aider, j'ai rédigé quelques petits trucs là dessus.
                      Pour ton problème, il faut envoyer une requête "POST" au serveur.
                      Voici les exemples : http://www.wxdev.fr/categorie-snippets-2-Internet-Reseaux
                      C'est codé avec wxWidgets, mais tu pourras toujours t'inspirer du principe pour tes propres requêtes.

                      Bonne chance
                      Xav'
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Portail français wxWidgets : wxDev.fr | Quelques progs + libs wxWidgets compilées : mywxstuff
                        20 mars 2008 à 17:25:43

                        Je n'ai toujours pas trouvé de solution a ce problème mais si on envoi une chaine par sockets à une adresse web est-ce que c'est considérer comme un envoi method POST (c'est-à-dire que l'on peut traiter avec du PHP) ?
                        J'ai lu sur d'autres forums qu'il y avait uje histoire de headers ... pouvait m'en dire plus sur la constitution et comment envoyer des informations à une url par methode POST ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 mars 2008 à 20:28:06

                          salut,

                          d'abord apprend a envoyer des messages a un serveur et a traiter les reponses.
                          pour cela utilise le protocole http voir ici pour savoir les bases, puis regarde sur internet tu trouvera des tutos ou exemples.

                          a+
                          hedi07
                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 mars 2008 à 16:13:41

                            Re-bonjour,
                            merci pour ta réponse hedi07 parce que après la lecture du tuto sur les requêtes HTTP j'ai bien compris maintenant comment ça marche les requetes HTTP.
                            Maintenant le question est qu'après avoir su comment les utiliser en PHP, comme faire pour les utiliser,à ce moment, en C++ ?
                            Merci d'avance ;) .
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 mars 2008 à 16:28:26

                              tu connect une socket a ton serveur, et tu envoie la requete. le serveur te repondra (wikipedia -> http)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 mars 2008 à 13:52:20

                                J'ai finalement trouver un code sur le net et j'y ai ajouté un fonction commande qui traitera les commande HTTP.
                                1. #include <winsock2.h>
                                2. #include <stdio.h>
                                3. #pragma comment(lib,"ws2_32.lib")
                                4. #define BUFSIZE 1024
                                5. int connection(char* server_name,int port)
                                6. {
                                7.         int sock;
                                8.         struct sockaddr_in serverSockAddr;
                                9.         struct hostent *serverHostEnt;
                                10.         memset(&serverSockAddr,0,sizeof(serverSockAddr));
                                11.         serverHostEnt = gethostbyname(server_name);  // recupere données sur serveur.
                                12.         if (serverHostEnt == NULL)
                                13.         {
                                14.                 printf("Serveur introuvable : %s\n",server_name);
                                15.                 return -1;
                                16.         }
                                17.         memcpy(&serverSockAddr.sin_addr,serverHostEnt->h_addr,serverHostEnt->h_length);
                                18.         serverSockAddr.sin_port = htons(port);
                                19.         serverSockAddr.sin_family = AF_INET;
                                20.         sock = socket(AF_INET,SOCK_STREAM,0); // cree la socket
                                21.         if (sock<0)
                                22.         {
                                23.                 printf("creation de socket a foire...\n");
                                24.                 return -1;
                                25.         }
                                26.         if(connect(sock,(struct sockaddr *)&serverSockAddr,sizeof(serverSockAddr))<0)
                                27.         {
                                28.                 printf("Impossible de se connecter :(\n");
                                29.                 return -1;
                                30.         }
                                31.         return sock;
                                32. }
                                33. char commande(int sock,char *commande) {
                                34.     send(sock,commande,strlen(commande)+1,0);
                                35.     char text[1024]; /* taille arbitraire */
                                36.    int n = recv (sock, text, sizeof text + 1, 0);
                                37.    if (n > 0)
                                38.    {
                                39.       text[n] = 0;
                                40.       /* debug */
                                41.       printf ("Texte recu : '%s'\n", text);
                                42.    }
                                43.     return *text;
                                44. }
                                45. int main()
                                46. {
                                47.         int sock=-1;
                                48.         char server_name[]="www.siteduzero.com";
                                49.         char request_host[]="www.siteduzero.com";
                                50.         char request_path[]="/";
                                51.         char fichier[]="index.html";
                                52.         int port=80;
                                53.         WSADATA wsa;
                                54.         WSAStartup(MAKEWORD(2,0),&wsa);
                                55.         sock=connection(server_name,port);
                                56.         if (sock<0)
                                57.                 return -1;
                                58. printf("%s",commande(sock,"GET /index.html HTTP/1.1\r\n"
                                59. "Host: www.siteduzero.com\r\n"
                                60. "User-Agent: Me\r\n"
                                61. "Connection: close\r\n"
                                62. "\r\n"));
                                63.         /* fermeture de la connection */
                                64.         shutdown(sock,2);
                                65.         closesocket(sock);
                                66.         WSACleanup( );
                                67.         return 0;
                                68. }

                                Le problème est que je reçois bien la page d'accueil du siteduzero mais voila le programme bloque. A mon avis, je crois que le problème vient de la taille du buffer et donc je crois, d'après ce que j'ai lu sur d'autres forum qu'il faut séparer les données reçus en plusieurs parties : comment faire ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  23 mars 2008 à 14:39:24

                                  Bonjour,

                                  je serais super intérrésé par ce code !
                                  Mais avait vous un exemple avec Qt

                                  Car j'ai fait un formulaire avec Qt Designer et normalement si on mets sont mdp + login il devrai se connecter au site via deux champs du site.

                                  Merci.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 mars 2008 à 18:51:01

                                    J'ai essayer d'envoyer par méthode POST pour tenter de me connecter au siteduzero directement depuis mon programme mais ca marche pas.
                                    1. int main()
                                    2. {
                                    3.         int sock=-1;
                                    4.         char server_name[]="www.siteduzero.com";
                                    5.         char request_host[]="www.siteduzero.com";
                                    6.         char request_path[]="/";
                                    7.         char fichier[]="index.html";
                                    8.         int port=80;
                                    9.         WSADATA wsa;
                                    10.         WSAStartup(MAKEWORD(2,0),&wsa);
                                    11.         sock=connection(server_name,port);
                                    12.         if (sock<0)
                                    13.                 return -1;
                                    14. printf("%s",commande(sock,"POST /connexion.html HTTP/1.1\r\n" //J'ai même essayé connexion.php
                                    15. "Host: www.siteduzero.com\r\n"
                                    16. "User-Agent: Me\r\n"
                                    17. "Connection: close\r\n"
                                    18. "\r\n\r\n"
                                    19. "pseudo=i_robot&pass=mon_mot_de_passe\r\n"));
                                    20.         /* fermeture de la connection */
                                    21.         shutdown(sock,2);
                                    22.         closesocket(sock);
                                    23.         WSACleanup( );
                                    24.         return 0;
                                    25. }

                                    Où est l'erreur ?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      23 mars 2008 à 23:31:55

                                      salut

                                      voici le programme que je viens de finir, il y a le client et le serveur.

                                      client :


                                      fenetre.cpp
                                      1. #include "fenetre.h"
                                      2. #include <string>
                                      3. #include <QTextStream>
                                      4. fenetre::fenetre() : QWidget()
                                      5. {
                                      6.         setFixedSize(300, 150);  
                                      7.         m_port = 4000;  // a remplacer par 80 pour se connecter en http
                                      8.         m_ip = "127.0.0.1"; //l'adresse du site
                                      9.         m_label = new QLabel(this);  //indique si on est connecter ou pas
                                      10.         m_label->setGeometry(10, 55, 100, 20);
                                      11.         m_label->setText("non connecté");
                                      12.         m_envoi = new QPushButton(this); //une fois connecter pour envoyer un message
                                      13.         m_envoi->move(10,100);
                                      14.         m_envoi->setText("envoi");
                                      15.         m_line = new QLineEdit(this); //pour entré le message
                                      16.         m_line->setMaxLength(150);
                                      17.         m_line->setGeometry(10, 75, 150, 20);
                                      18.         m_line_ip = new QLineEdit(this); // pour entré l'ip
                                      19.         m_line_ip->setMaxLength(150);
                                      20.         m_line_ip->setGeometry(10, 10, 150, 20);
                                      21.         m_bout_ip = new QPushButton(this); //pour valider l'ip
                                      22.         m_bout_ip->move(10,30);
                                      23.         m_bout_ip->setText("connexion");
                                      24.         QObject::connect(&m_socket, SIGNAL(connected()),this, SLOT(changerLabel()));
                                      25.         //quand on est connecter on chage le label en "connecter"
                                      26.         QObject::connect(m_envoi, SIGNAL(clicked()),this, SLOT(envoi()));
                                      27.         //quand on clique sur nvoie on envoi
                                      28.         QObject::connect(m_envoi, SIGNAL(clicked()), m_line, SLOT(clear()));
                                      29.         // et on vide la QLineEdit
                                      30.         QObject::connect(&m_socket, SIGNAL(readyRead()), this, SLOT(lecture()));
                                      31.         //si on peut lire on le fait
                                      32.         QObject::connect(m_bout_ip, SIGNAL(clicked()), this, SLOT(connecter()));
                                      33.         //si m_bout_ip est cliquer on se connect
                                      34.         QObject::connect(m_bout_ip, SIGNAL(clicked()), m_line_ip, SLOT(clear()));
                                      35.         //et on vide la QLineEdit
                                      36. }
                                      37. //pour se mettre en "connecter"
                                      38. void fenetre::changerLabel()
                                      39. {
                                      40. m_label->setText("connecté");
                                      41. }
                                      42. //pour se connecter
                                      43. void fenetre::connecter()
                                      44. {
                                      45. m_socket.connectToHost(m_line_ip->text(),m_port);    
                                      46. }
                                      47. //pour envoyer
                                      48. void fenetre::envoi()
                                      49. {
                                      50.      QTextStream texte(&m_socket);
                                      51.      texte << m_line->text() << endl;
                                      52. }
                                      53. //pour lire
                                      54. void fenetre::lecture()
                                      55. {
                                      56.  QString ligne;
                                      57.  //tant qu'on peut lire
                                      58.  while(m_socket.canReadLine())
                                      59.  {
                                      60.  //on lit
                                      61.   ligne = m_socket.readLine();
                                      62.   //et on affiche
                                      63.   m_label->setText(ligne);
                                      64.  }
                                      65. }


                                      fenetre.h
                                      1. #ifndef DEF_FENETRE
                                      2. #define MA_FENETRE
                                      3. #include <QApplication>
                                      4. #include <QWidget>
                                      5. #include <QLabel>
                                      6. #include <QtNetwork>
                                      7. #include <QPushButton>
                                      8. #include <QLineEdit>
                                      9. #include <string>
                                      10. class fenetre : public QWidget
                                      11. {
                                      12. Q_OBJECT
                                      13. public :
                                      14.        fenetre();
                                      15. public slots :
                                      16.        void changerLabel();
                                      17.        void connecter();
                                      18.        void envoi();
                                      19.        void lecture();
                                      20. private :
                                      21.         QTcpSocket m_socket;
                                      22.         QLabel *m_label;
                                      23.         QPushButton *m_envoi;
                                      24.         QPushButton *m_bout_ip; // bouton associé a un ligne de texte pour rentre l'ip
                                      25.         QString m_ip; //la ou est stocké l'ip
                                      26.         int m_port;
                                      27.         QLineEdit *m_line; //pour rentré les message a envoyer
                                      28.         QLineEdit *m_line_ip; // pour rentré l'ip a laquelle se connecter
                                      29. };
                                      30. #endif


                                      et le main
                                      1. #include <QApplication>
                                      2. #include <QWidget>
                                      3. #include "fenetre.h"
                                      4. #include <string>
                                      5. //comme d'hab' ici
                                      6. using namespace std;
                                      7. int main(int argc, char *argv[])
                                      8. {
                                      9.     QApplication app(argc, argv);
                                      10.     fenetre ecran;
                                      11.     ecran.show();
                                      12.     return app.exec();
                                      13. }


                                      le serveur :


                                      fenetre.cpp
                                      1. #include "fenetre.h"
                                      2. #include <QTextStream>
                                      3. fenetre::fenetre() : QWidget()
                                      4. {
                                      5.         setFixedSize(300, 150);  
                                      6.         m_server.listen(QHostAddress::Any,4000);//on attend une connection
                                      7.         m_label = new QLabel(this);
                                      8.         m_label->setText("non connecté");
                                      9.         m_label->setGeometry(10, 20, 100, 20);
                                      10.         m_envoi = new QPushButton(this);
                                      11.         m_envoi->setText("envoyer");
                                      12.         m_envoi->move(10, 70);
                                      13.         m_line = new QLineEdit(this);
                                      14.         m_line->setGeometry(10, 50, 150, 20);
                                      15.         QObject::connect(&m_server, SIGNAL(newConnection()), this, SLOT(changerLabel()));
                                      16.         QObject::connect(m_envoi, SIGNAL(clicked()), this, SLOT(envoi()));
                                      17.         QObject::connect(m_envoi, SIGNAL(clicked()), m_line, SLOT(clear()));
                                      18. }
                                      19. void fenetre::changerLabel()
                                      20. {
                                      21. m_label->setText("connecté");
                                      22. m_socket = m_server.nextPendingConnection();
                                      23. QObject::connect(m_socket, SIGNAL(readyRead()), this, SLOT(lecture()));
                                      24. }
                                      25. void fenetre::lecture()
                                      26. {
                                      27.      QString ligne;
                                      28.      while(m_socket->canReadLine())
                                      29.      {
                                      30.       ligne = m_socket->readLine();
                                      31.       m_label->setText(ligne);
                                      32.      }
                                      33. }
                                      34. void fenetre::envoi()
                                      35. {
                                      36.      QTextStream texte(m_socket);
                                      37.      texte << m_line->text() << endl;
                                      38. }


                                      fenetre.h
                                      1. #ifndef DEF_FENETRE
                                      2. #define MA_FENETRE
                                      3. #include <QApplication>
                                      4. #include <QWidget>
                                      5. #include <QLabel>
                                      6. #include <QtNetwork>
                                      7. #include <QPushButton>
                                      8. #include <QlineEdit>
                                      9. class fenetre : public QWidget
                                      10. {
                                      11. Q_OBJECT
                                      12. public :
                                      13.        fenetre();
                                      14. public slots :
                                      15.        void changerLabel();
                                      16.        void lecture();
                                      17.        void envoi();
                                      18. private :
                                      19.         QTcpSocket *m_socket;
                                      20.         QTcpServer m_server;
                                      21.         QLabel *m_label;
                                      22.         QPushButton *m_envoi;
                                      23.         QLineEdit *m_line;
                                      24. };
                                      25. #endif


                                      et le main
                                      1. #include <QApplication>
                                      2. #include <QWidget>
                                      3. #include "fenetre.h"
                                      4. using namespace std;
                                      5. int main(int argc, char *argv[])
                                      6. {
                                      7.     QApplication app(argc, argv);
                                      8.     fenetre ecran;
                                      9.     ecran.show();
                                      10.     return app.exec();
                                      11. }


                                      désolé pour le message immensément long.
                                      ce programme marche chez moi en tout cas sur deux ordi différent mais sur le réseau (pas essayer sur internet).
                                      on lance le serveur puis le client, sur le client il y a deux zone de texte: une pour entrer l'ip et l'autre pour le message.
                                      deux bouton un pour valider l'ip, l'autre pour envoyer le message.
                                      et un label pour afficher les message reçu.

                                      le serveur attend une connection puis on peut envoyer les message via une zone de texte et un bouton.
                                      les message reçu sont afficher dans un QLabel.

                                      a+
                                      hedi07

                                      encore desolé pour la taille du message
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        24 mars 2008 à 14:45:44

                                        Citation : i_robot

                                        A mon avis, je crois que le problème vient de la taille du buffer et donc je crois, d'après ce que j'ai lu sur d'autres forum qu'il faut séparer les données reçus en plusieurs parties : comment faire ?



                                        voila comment je fait (et la SFML aussi):
                                        1. /* Receive */
                                        2.     std::string Response;
                                        3.     char Buffer[Chunk] = {0};
                                        4.     Int32 Received = 0;
                                        5.     do
                                        6.     {
                                        7.         Received = recv(mySocket, Buffer, sizeof(Buffer), 0);
                                        8.         if(Received > 0)
                                        9.         {
                                        10.             Buffer[Received] = '\0';
                                        11.             Response.append(Buffer);
                                        12.         }
                                        13.         else if(Received < 0)
                                        14.         {
                                        15.             #if defined(TOOLS_DEBUG)
                                        16.                 *DOut << "Tools::HTTP::Request - Error to receive data of a TCP socket" << std::endl;
                                        17.             #endif
                                        18.             return Platform::Socket::GetErrorStatus();
                                        19.         }
                                        20.     } while(Received > 0);
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Remplissage et envoi automatique de formulaires

                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                        • Editeur
                                        • Markdown