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++ Discussion :

Méthode POST avec std::ostream


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Points : 27
    Points
    27
    Par défaut Méthode POST avec std::ostream
    Bonsoir,

    J'ai une question assez simple. J'utilise la librairie boost::asio dans mon programme C++ avec std::ostream. Le bout de code ci dessous fonctionne très bien avec la méthode GET. J'arrive à passer les paramètres dans l'URL et le serveur me retourne la bonne réponse. En revanche, avec la méthode POST, le serveur (le script PHP) ne récupère pas les paramètres. Ils ne me semblent pas transmis... Par rapport à la méthode GET, j'ai seulement mis les paramètres à la fin, et POST à la place de GET.
    Auriez-vous une idée de ce qui cloche ? Voici l'extrait du code en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        boost::asio::streambuf request;
        std::ostream request_stream(&request);
        request_stream << "POST " << "/essai_post.php" << " HTTP/1.0\r\n";
        request_stream << "Host: " << "xx.xx.xx.xx" << "\r\n";
        request_stream << "Accept: */*\r\n";
        request_stream << "Connection: close\r\n\r\n";
        request_stream << "str=hello&id=coucou\r\n";
        boost::asio::write(socket, request);
    Merci.

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Il semblerait que tu doive fournir la taille de la chaine de caractères à fournir à la méthode POST
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    boost::asio::streambuf request;
        std::ostream request_stream(&request);
        request_stream << "POST " << "/essai_post.php" << " HTTP/1.0\r\n";
        request_stream << "Host: " << "xx.xx.xx.xx" << "\r\n";
        request_stream << "Accept: */*\r\n";
        request_stream << "Content-length : 18 \r\n"; /* si j'ai bien compté :P */
        request_stream << "Connection: close\r\n\r\n";
        request_stream << "str=hello&id=coucou\r\n";
        boost::asio::write(socket, request);
    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
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Un POST *doit* avoir content-length spécifié... *surtout* en HTTP/1.0 (en http 1.0 dès que des données sont envoyées, il *faut* le content-length)

    De plus tu ne précise:
    - ni le serveur ("server: mon.serveur.com"), ce qui fait que ca ne marchera pas sur des virtual-hosts
    - ni le user-agent (ce qui risque d'être refusé par le serveur hôte)
    - ni le content-type

    Par contre tu précises le "connection", ce qui est inutile en HTTP/1.0 (forcément 'close' si je me souviens bien).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    Merci pour vos réponses.

    J'ai ajouté le paramètre "Content-length" et le "Content-type" et sa fonctionne !
    Pour le "Content-type", j'ai mis "application/x-www-form-urlencoded".
    J'ai ajouté de plus le paramètre "server".

    Par contre, pour le "user-agent", je ne sais pas quoi mettre sachant que l'application n'est pas un navigateur mais un programme C++.

    Savez-vous quelle valeur il conviendrait de mettre pour le "user-agent" ?

    Par ailleurs, dans le cas où la connexion aurait lieu à travers un parefeu, pourriez-vous me dire s'il est nécessaire d'ajouter d'autres paramètres ? Ou bien, est-ce que l'ouverture, dans le parefeu, du port 80 (port par défaut) et de l'accès à l'URL indiquée au niveau des paramètres "Host" et "Server" est suffisante ?

    Merci.

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Tout dépend des règles du pare-feu ....

    En général, les parefeu disent:

    Autorise toute connection de l'interieur vers l'exterieur avec le port 80

    Donc tant que le serveur est bien sur le port 80, tout devrait marcher.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Comme user-agent, tu as plusieurs solutions:
    • Tu te fais passer pour un navigateur connu (petit filou), tels que firefox ou internet explorer
    • tu fournis le nom de ton application, mais il n'est pas impossible de remarquer que le site n'accepte pas la chaine reçue


    Je t'inviterais peut être à lire l'article de wikipedia qui traite du sujet pour comprendre de quoi il retourne
    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

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    Merci pour vos réponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème formulaire méthode POST avec gadget Windows
    Par Zendon dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/08/2011, 15h41
  2. méthode POST avec les caractères '&' et '+' dans une variable
    Par ayvong dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/07/2008, 20h38
  3. Méthode POST avec un + dans une chaine
    Par danathane dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 28/04/2008, 16h26
  4. PHP5: difficulté avec la méthode post
    Par koueletbak dans le forum Langage
    Réponses: 10
    Dernier message: 14/04/2006, 11h07
  5. Réponses: 3
    Dernier message: 07/03/2005, 15h08

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