logo Homepage
Pages: [1]
  Imprimer  
Auteur Fil de discussion: [C++] Méthode POST, protocole HTTP  (Lu 4631 fois)
Rhesus

Profil challenge

Classement : 908/54277

Néophyte
*
Hors ligne Hors ligne
Messages: 21


Voir le profil
« le: 30 Janvier 2007 à 17:24:05 »

Bonjour,
j'ai longtemps développé mes applis réseaux en delphi lorsque j'avais besoin du protocole HTTP, car le composant indy IdHTTP gérait cela très bien.
Mais j'aime ben aussi développer des applis réseaux en C++ et je commence à me coder mes classes pour aérer le code.
Seulement, je suis en train de faire une classe fille de ma classe TCPClient pour gérer le protocole HTTP. Et là, malheur, je teste un peu déjà avec un terminal genre telnet (putty pour ce que ça intéresse), et je sais utiliser GET sans problème, mais les problèmes arrivent avec la méthode post. Je n'arrive vraiment pas à l'utiliser pourtant j'ai trouvé des sites où il était donné une syntaxe (et c'est toujours la même qui revient) :

POST /mapage.php HTTP/1.1 \r\n
Content-length:15 \r\n
host:taratata.toto \r\n
\r\n
A1=valeur1&A2=valeur2 \r\n
\r\n

Et j'ai toujours a réponse : your browser sent a request not understood.
ou "the requested URL was not found" alors qu'un GET trouve la page sans problème !

Merci d'avance pour vos réponse!
Journalisée
S0410N3
Administrateur

Profil challenge

Classement : 10/54277

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1260


Voir le profil WWW
« #1 le: 30 Janvier 2007 à 17:29:06 »

C'est sûrement à cause du Content-Type manquant (obligatoire pour faire du POST il me semble)
Et tu as des problèmes d'espaces mal placés (aucun avant :, un après).
La casse est importante également.
Essaie plutôt comme ça :

POST /mapage.php HTTP/1.1\r\n
Host: www.blabla.com\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 20\r\n
\r\n
A1=valeur1&A2=valeur2
Journalisée

Enjoy (copyleft de quelqu'un qui a trop parlé)

S0410N3

-------------------------------------------------------------------------------------
La folie est le prix à payer pour le temps passé à être trop lucide.
-------------------------------------------------------------------------------------
http://forum.hardware.fr/hfr/Discussions/Societe/francais-repere-repaire-sujet_19265_1.htm
Rhesus

Profil challenge

Classement : 908/54277

Néophyte
*
Hors ligne Hors ligne
Messages: 21


Voir le profil
« #2 le: 30 Janvier 2007 à 17:36:38 »

Merci beaucoup, ça marche !
Je savais pas que la casse était importante, ni cette partie de la requête. Merci encore !
Journalisée
Nms

Profil challenge

Classement : 76/54277

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 794


Voir le profil
« #3 le: 30 Janvier 2007 à 17:38:24 »

Ca peut venir de plusieurs endroits, je ne suis pas un expert du protocole HTTP mais il faut être très précautionneux.
Déjà enlève tous les espaces que l'on voit avant tes retours lignes \r\n. Ensuite es-tu bien sûr que \r\n  est bien interprété comme les 2 caractères Carriage Return (0x0D) et Line Feed (0x0A). Je m'y connais très peu en C mais le PHP utilise une syntaxe très proche et "\r\n" (entre double quotes) va donner la bon résultat, mais '\r\n' non. Peut-être est-ce la même chose en C++ (corrigez moi si je dis d'affreuses conneries).
Ensuite essaye de mettre ta ligne Host:taratata.toto en 2nde position (en n'oubliant pas de mettre le bon nom du serveur auquel tu envoies la requête à la place de taratata.toto .
Ensuite, n'oublie pas d'ajuster le Content-length à la taille des données postées (longueur de la chaine A1=valeur1&A2=valeur2).
Et pour finir, enlève les 2 derniers \r\n ils ne servent à rien.

Edit: pas assez vif...
Journalisée

Ex Newbie Contest Staff :
Nms
Status :
Concepteur d'épreuves
Citation :
Je ne sais qu'une chose : que je ne sais rien. (Socrate)
IoNAce
Profil challenge

Classement : 2112/54277

Membre Junior
**
Hors ligne Hors ligne
Messages: 63


Voir le profil
« #4 le: 30 Janvier 2007 à 18:10:17 »

"Je m'y connais très peu en C mais le PHP utilise une syntaxe très proche et "\r\n" (entre double quotes) va donner la bon résultat, mais '\r\n' non. Peut-être est-ce la même chose en C++ (corrigez moi si je dis d'affreuses conneries)."

En fait, les simples quote en C signifie un seul caractere. Il ne peut y avoir de chaines de caracteres avec de simple quotes donc a chaque fois, les \r \n sont bien interpretes. C'est un peu penible quand on code beaucoup en php et qu'on revient au C++ mais on s'y fait vite.

@++
Journalisée
Nms

Profil challenge

Classement : 76/54277

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 794


Voir le profil
« #5 le: 30 Janvier 2007 à 18:38:00 »

Merci pour les précisions
Journalisée

Ex Newbie Contest Staff :
Nms
Status :
Concepteur d'épreuves
Citation :
Je ne sais qu'une chose : que je ne sais rien. (Socrate)
Rhesus

Profil challenge

Classement : 908/54277

Néophyte
*
Hors ligne Hors ligne
Messages: 21


Voir le profil
« #6 le: 30 Janvier 2007 à 20:00:05 »

Oui effectivement j'étais sûr de mes \r\n parce qu'il n'y avait aucun problème avec les GET. Mais j'ai vraiment peu de doc sur les diffèrents protocoles (sur la prog réseau aussi, faudra peut-être que j'écrive un article ou un cours sur la fabrication d'une telle classe...)
Enfin merci bien pour toute ces reponses rapides !
Journalisée
the lsd
Administrateur

Profil challenge

Classement : 190/54277

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 3096

poulping for fun & profit


Voir le profil WWW
« #7 le: 31 Janvier 2007 à 00:01:41 »

bon, je bouge le topic dans une catégorie un peu plus appropriée. zou, direction language compilé

Enjoy

The lsd
Journalisée

Newbie Contest Staff :
The lsd - Th3_l5D (IRC)
Statut :
Administrateur
Citation :
Cartésien désabusé : je pense, donc je suis, mais je m'en fous !
Pages: [1]
  Imprimer  
 
Aller à: