IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

Service web REST et c++


Sujet :

C++/CLI

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Mod�rateur
    Avatar de toopac
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Par d�faut Service web REST et c++
    Bonjour,

    J'ai cr�� une application en C++ qui me permet de d�tecter les changements dans un r�pertoire.

    Le but est d'en notifier ensuite un serveur.

    Je n'arrive pas � trouver comment envoyer un xml � mon serveur (php) via un service web REST.

    xml du type :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    <Changement>
        <type/>
        <date/>
        <localisation/>
        <ancien_nom/>
        <nouveau_nom/>
    </changement>
    Pouvez vous me dire comment faire, ou me mettre sur la piste? Merci!

  2. #2
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Plut�t que d'essayer d'envoyer tout le fichier xml au serveur, pourquoi n'essaie-tu pas, tout simplement, d'envoyer une requete "GET" ou "POST" � une page php particuli�re qui se chargerait, elle, de rajouter l'information directement sur le serveur

    En effet, on peut estimer qu'il y aura de nombreuses modifications du dossier, autrement, tu n'essaierais pas de les d�tecter .

    Si tu ajoute des informations dans un fichier local et que tu essaie de l'envoyer vers un serveur � chaque fois, tu va te trouver dans une situation dans laquelle tu va... envoyer un fichier de plus en plus gros, alors que, en d�finitive, la seule diff�rence entre le fichier qui se trouve en local et le fichier qui se trouve sur le serveur tient dans... la derni�re modification apport�e au dossier.

    Tu �conomisera donc �norm�ment ta bande passante et ton volume de transfert si, au lieu d'envoyer le fichier complet � chaque fois, tu n'envoie que... les informations relatives � la derni�re modification

    En gros, si tu essayais de transmettre ces informations a mano � chaque fois au serveur, tu lui enverrais sans doute un formulaire proche de
    Code HTML : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <form id="form1" name="form1" method="post" action="">
        <label for="type">type</label>
        <select name="type" id="type">
          <option>ajout fichier</option>
          <option>suppression fichier</option>
          <option>changement de nom</option>
          <option>ajout dossier</option>
          <option>suppression dossier</option>
        </select>
        <label for="date">date</label>
        <input type="text" name="date" id="date" />
        <label for="localisation">localisation</label>
        <input type="text" name="localisation" id="localisation" />
        <label for="ancien">ancien nom</label>
        <input type="text" name="ancien" id="ancien" />
        <label for="nouveau">nouveau nom</label>
        <input type="text" name="nouveau" id="nouveau" />
      <input type="submit" name="Envoyer" id="Envoyer" value="Envoyer" />
    </form>
    Et ce serait ton code php qui utiliserait les valeurs renvoy�es par ce formulaire pour rajouter les parties correspondantes dans sa version du fichier xml.

    Ce que je te conseillerais donc de faire, c'est de cr�er une requete HTML qui... agisse exactement comme si tu avais toi-m�me cliqu� sur le bouten "Envoyer"
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  3. #3
    Mod�rateur
    Avatar de toopac
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Par d�faut
    J'ai du mal m'exprimer...dsl

    En fait � chaque modification j'envoie au service web REST le xml contenant les infos de la modification.
    exemple : si qqn renomme le fichier toto.txt en tata.txt, j'envoie imm�diatement
    le xml suivant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    <modification>
        <type>renommage</type>
        <date>28-05-10 13:20:00</date>
        <localisation>C:/MonDossier</localisation>
        <ancien_nom>toto.txt</ancien_nom>
        <nouveau_nom>tata.txt</nouveau_nom>
    </modification>
    Je sais envoyer un xml � un service web REST en Flex par exemple, �a donne �a (peut �tre plus clair que ce que je raconte^^):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    var service:HTTPService=new HTTPService();
    service.resultFormat=HTTPService.RESULT_FORMAT_XML;
    service.url=urlWebService; //exemple http://www.domaine.fr/rest/modificationREST
    service.addEventListener(ResultEvent.RESULT, onResult);
    service.addEventListener(FaultEvent.FAULT, onFault);
    service.send(xmlAEnvoyer);//voir plus haut
    mais c'est �a que je ne sais pas comment faire en c++...

  4. #4
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Mais la question que je me pose, c'est: pourquoi envoyer l'information sous la forme d'un fichier xml, alors que php serait parfaitement en mesure de... cr�er un tel fichier directement sur le serveur sur lequel il s'ex�cute

    L'un dans l'autre, tu dois, de toutes mani�res, envoyer un requ�te au serveur php, et tu envoie donc d�j� une en-t�te html.

    Pourquoi ne pas, directement, envoyer les information "brutes" � php, � charge pour lui de les traiter de mani�re ad�quate, plut�t que d'envoyer, en plus de l'en-t�te html, un fichier qui implique la transmission de donn�es suppl�mentaires tout � fait inutiles car... potentiellement ajoutables directement par php?

    Cela permettrait en outre de simplifier les choses si, par la suite, tu voulais modifier la mani�re dont les informations sont maintenues sur le serveur:

    Si tu envoies directement un fichier xml et que tu d�cide de rajouter des informations, tu devra modifier ton application, et veiller � ce que chaque copie de celle-ci soit mise � jour (pour �viter l'envoi d'information "au mauvais format")

    Si tu envoies simplement les donn�es brutes, tu n'as qu'� modifier la mani�re dont php les g�re, et la modification est prise en compte de mani�re totalement transparente pour les diff�rents clients (comprend: pour toute personne utilisant une copie de ton application )
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  5. #5
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Salut,
    Nativement, il n'y a rien en C++ pour envoyer des requ�tes HTTP.
    Tu peux passer par libCurl qui je crois g�re cette pile.
    Qt doit bien avoir de quoi faire aussi, avec �a peut �tre;
    Les MFC ont aussi des choses pour �a il me semble.
    Et c�t� wxWidget, il y a un wxHTTP qui esp�rons-le porte bien son nom.
    C�t� boost, je crois que pour l'instant il n'y a rien. Mais ceci serait en pr�paration ?

  6. #6
    Mod�rateur
    Avatar de toopac
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Par d�faut
    @koala01 : je comprends tes interrogations, mais je fais ce qu'on me demande de faire... Sinon je serai plut�t partit sur du C# pour faire du .NET que de c++ par exemple...
    De toute fa�on si il y a une modification par minute �a sera d�j� �norme.

    @3DArchi : merci pour tes liens, qui m'ont finalement mis sur la voie.
    J'utilise la classe HttpRequest et �a fonctionne tr�s bien.

    Au final je laisse le code que j'ai fais (ou plut�t assembl� avec des morceaux pris � droite � gauche) :


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #include "RestWS.h"
     
    #using <System.dll>
     
    using namespace System;
    using namespace System::IO;
    using namespace System::Net;
    using namespace System::Text;
     
     
    RestWS::RestWS()
    {
    }
     
    void RestWS::Send(String^ xml)
    {
       String^ url = "http://monDomaine/index.php/rest/WsREST";
     
       HttpWebResponse^ response;
       StreamReader^ sr;
     
       try
       {
          //création du HttpWebRequest
          HttpWebRequest^ request = dynamic_cast<HttpWebRequest^>(WebRequest::Create(url));
     
          //définition de la méthode
          request->Method = "POST";
     
          //on convertit les données à envoyer 
          ASCIIEncoding^ encoding = gcnew ASCIIEncoding;
          array<Byte>^ dataToSend = encoding->GetBytes( xml );
     
          // définition du type de contenu des données à envoyer
          request->ContentType = "application/xml";
          //request->ContentType = "application/x-www-form-urlencoded";
     
          //définition de la taille du contenu à envoyer
          request->ContentLength = dataToSend->Length;
     
          //on ajoute les données à envoyer
          Stream^ writeStream = request->GetRequestStream();
          writeStream->Write( dataToSend, 0, dataToSend->Length );
          writeStream->Close();
     
          response = dynamic_cast<HttpWebResponse^>(request->GetResponse());
          sr = gcnew StreamReader(response->GetResponseStream());
          String^ result = sr->ReadToEnd();
       }
       catch (Exception^ e)
       {
          //
       }
       finally
       {
          if (response !=nullptr)
             response->Close();
          if (sr != nullptr)
             sr->Close();
       }
    }
    Merci � tous les deux pour votre aide!

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Aide] Service web RESt et SOAP
    Par brixou dans le forum Services Web
    R�ponses: 0
    Dernier message: 22/02/2011, 10h11
  2. [1.x] Services web REST et insertion de donn�es
    Par gavelin dans le forum Symfony
    R�ponses: 1
    Dernier message: 20/09/2010, 12h27
  3. Service web REST en VB.NET Hey!Spread
    Par hbhhhbhh dans le forum Services Web
    R�ponses: 0
    Dernier message: 21/05/2010, 14h54
  4. Impl�menter un service web RESTful en Java
    Par Arnaud_03 dans le forum REST
    R�ponses: 4
    Dernier message: 21/04/2009, 18h06
  5. Impl�menter un service web RESTful
    Par Arnaud_03 dans le forum Services Web
    R�ponses: 4
    Dernier message: 21/04/2009, 18h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo