Communication entre spcket C++ et serveur wweb php
joeblack59
Messages postés5Date d'inscriptionjeudi 28 octobre 2004StatutMembreDernière intervention 6 janvier 2005
-
5 janv. 2005 à 14:52
meech
Messages postés209Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention14 août 2007
-
6 janv. 2005 à 22:30
je souhaiterais arriver à me connecter à un serveur web en php avec un programme en C++. Je sais comment marche les sockets sous C++. Mais, on m'a dit qu'il fallait envoyer au serveur un header http pour que le serveur comprenne que le protocole est http. Mais je ne sais pas quelle forme prend le header http. Auriez-vous un exemple?
Et du coté du serveur, comment reçoit-il ce header? Il utilise un POST, un GET ou autre chose?
merci
meech
Messages postés209Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention14 août 2007 6 janv. 2005 à 22:15
Salut,
Puisque tu sembles bien connaître la gestion des sockets en C/C++, je me passe de tout commentaire, d'autant plus que tu peux trouver un bon nombre de codes sur ce site.
Concernant une requête HTTP simple, tu peux faire un essai facile en ouvrant une console telnet. Par exemple :
telnet www.google.fr 80
GET / HTTP/1.1 (puis un retour chariot)
Host: www.google.fr (puis deux retours chariots)
S'affichera alors la page html demandée. Voici l'une des plus simplistes structures de requêtes http. Bien sûr, les navigateurs adressent beaucoup de paramètres, comme par exemple les mime-types acceptés (en gros, les types de fichiers) ou le type de navigateur...
Dans l'exemple ci-dessus :
1. la commande telnet établit une connexion vers le serveur google.fr port 80.
2. tu réalises ensuite une requête vers le / (après le nom de domaine), c'est-à-dire la racine du site, en utilisant la méthode GET et la version 1.1 du protocole HTTP.
3. tu spécifies le nom de domaine par l'attribut "Host:". Cet argument est parfois (voire souvent) nécessaire puisqu'il est possible de spécifier à un serveur (comme Apache ou IIS) l'obligation de ne répondre que sur tel ou tel nom de domaine.
meech
Messages postés209Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention14 août 2007 6 janv. 2005 à 22:18
J'oubliais : en résumé, dans ton code C/C++ tu dois envoyer, une fois ta connexion établie par socket, une chaîne de ce genre :
char query[] = "GET / HTTP/1.1\r\n"
"Host: www.google.fr\r\n\r\n";
meech
Messages postés209Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention14 août 2007 6 janv. 2005 à 22:30
Désolé pour la fin de ta question, j'avais zappé... En fait, le serveur reçoit l'ensemble de la requête et, si cette dernière est valide, il retourne la page correspondante à celle que tu as demandé et ce, en fonction des paramètres passés.
Les méthodes GET ou POST ne sont qu'à usage du client (du navigateur). Elles permettent simplement de fournir au serveur des paramètres qu'il peut éventuellement prendre en considération pour te fournir des pages dites dynamiques (par opposition aux pages statiques, comme les fichiers html ou texte).
Ces pages dynamiques sont générés par des interpréteurs (ou des programmes dans le cas des CGI), lesquelles traitent les paramètres passés par le client via méthode GET ou POST.
En gros, la méthode GET passe les paramètres dans l'url (tu sais, ce qu'il y a après le point d'interrogation dans la barre d'adresse) alors que la méthode POST cachent ces informations (non-visibles dans la barre d'adresse).
En tout cas, la réponse du serveur fait fi de ces méthodes : cette réponse, pour qu'elle soit valable, nécessite elle-aussi un respect scrupuleux de normes diverses. Elle ressemble, simplifié, à ce qui suit :
HTTP/1.1 200 OK (version_du_protocole code_retour_http message_retour)
Content-Type: text/html (attribut: type de la réponse fournie au client)
(toujours le coup des deux sauts de ligne, puis)
<html>
contenu de la page
</html>
Toujours pareil, cet exemple est minimaliste et il existe bien d'autres attributs (cf. RFC précédemment citées) Si tu as d'autres questions, n'hésite pas
.