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 :

Socket, Requette http


Sujet :

C++

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    396
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 396
    Par d�faut Socket, Requette http
    Hi.

    Est-il possible avec les sockets de faire des requettes http et d'en r�cup�rer les r�sultats ? Si oui : avez-vous des exemples, merci ?

  2. #2
    Membre extr�mement actif

    Homme Profil pro
    Ing�nieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par d�faut
    Oui c'est possible suffit d'envoyer une requete Http ( POST ou GET pour r�cuperer)
    Pas d'exemple sous la main mais doit avoir cela en stock

  3. #3
    Membre �prouv�
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    D�cembre 2005
    Messages
    109
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 109
    Par d�faut
    Il y a aussi quelques exemples dans le forum ...

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    396
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 396
    Par d�faut
    Merci pour vos r�ponses mais j'ai un probl�me...

    Voici mon code:
    Fonction membre de ma classe:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    void s_r(char *buffer) //send and receive
    {
      if(send(sock, buffer, strlen(buffer), 0)==-1){
          cout<<"Erreur....."<<endl;
      }
      ....
    }
    Dans main:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    char req[]= "GET http://www.google.fr/index.html HTTP/1.1\r\n"
    		   "Host: www.google.fr\r\n";
    test.s_r(req);
    J'ai sniffer avec Ethereal lors de l'�x�cution de se programme, il envoi bien req[] sur Internet mais ethereal reconnait ces donn�es en tant que "TCP segment Data" et non en tant que protocole HTTP ! Faut-il sp�cifier quelque part qu'il s'agit du protocole HTTP ?

    Merci...

  5. #5
    Membre �prouv�
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    D�cembre 2005
    Messages
    109
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 109
    Par d�faut
    L'en-t�te HTTP se termine par une ligne vide. Ta requ�te devrait �tre :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    "GET http://www.google.fr/index.html HTTP/1.1\r\n"
    "Host: www.google.fr\r\n"
    "\r\n";

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    396
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 396
    Par d�faut
    Ok, je vien d'ajouter le \r\n mais �a ne change rien au probl�me.

  7. #7
    R�dacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de syst�me d�information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Architecte de syst�me d�information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par d�faut
    Citation Envoy� par zenux
    [...] ethereal reconnait ces donn�es en tant que "TCP segment Data" et non en tant que protocole HTTP ! Faut-il sp�cifier quelque part qu'il s'agit du protocole HTTP ?
    mais �a me parait tout � fait normal. Tous ce qui est envoy� suivant le protocole HTTP est envoy� par TCP.

    TCP est un protocole de couche basse. HTTP est un protocole de couche haute, bas� sur TCP. Ethernal te sort des infos sur les couches basses donc tu ne peux pas en conclure que l'envoi HTTP s'est mal pass�.

    As-tu essay� de r�ceptionner le r�sultat de ta requ�te GET ?

  8. #8
    Membre �clair�
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    396
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 396
    Par d�faut
    1) Quand je sniffe avec ethereal lorsque je surf sur internet, il me dit bien que c'est un paquet ip->tcp->http.
    Et lorsque j'ex�cute mon programme, il me dit que c'est un paquet ip->tcp : pourquoi ne reconnait-il pas le Http ?

    2) Quand j'�x�cute ce code, sur Ethereal je ne voit aucun paquet de la part de google entre l'envoie de ma requete et la fermeture de ma connection !:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    send(sock, buffer, strlen(buffer), 0);
    sleep(5); //5 sec
    #ifdef _WIN32
    	closesocket(sock);
    	WSACleanup();
    #else
    	close(sock);
    #endif

  9. #9
    Membre �prouv�
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    D�cembre 2005
    Messages
    109
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 109
    Par d�faut
    Simple question : tu te connecte bien sur le port distant 80 ?

  10. #10
    Membre �clair�
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    396
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 396
    Par d�faut
    Le constructeur de ma classe:
    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
    		requete(char *ip, int port)
    		{
    			#ifdef _WIN32
    				WSADATA WSAData;
    				WSAStartup(MAKEWORD(2,2), &WSAData);
    			#endif
     
    			SOCKADDR_IN sin;
    			sin.sin_family      	= AF_INET;
    			sin.sin_addr.s_addr     = inet_addr(ip);
    			sin.sin_port       		= htons(port);
    			sock = socket(PF_INET, SOCK_STREAM, 0);
     
    			if(connect(sock, (SOCKADDR *)&sin, sizeof(sin))==-1){
                               cout<<"Erreur..."<<endl;
    			}
    		}
    Dans main:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	char ip[] = "66.249.93.104";
    	int port = 80;
    	char req[]= 	"GET http://www.google.fr/index.html HTTP/1.1\r\n"
    				"Host: www.google.fr\r\n";
    				"\r\n";
    	requete test(ip, port);
    	test.s_r(req);
     
    	return 0;

  11. #11
    R�dacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de syst�me d�information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Architecte de syst�me d�information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par d�faut
    je viens de faire l'essai. J'ai pris la requ�te
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    "GET http://www.google.fr/index.html HTTP/1.1\n\n"
                    "Host: www.google.fr\n\n";
    et je r�cup�re bien la page.

  12. #12
    Membre �prouv�
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    D�cembre 2005
    Messages
    109
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 109
    Par d�faut
    D'abord un conseil :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
          requete(char *ip, int port)
    Tu ferais mieux de d�clarer ip en const char *.

    Ensuite tu as oubli� de retirer un point-virgule :
    char req[]= "GET http://www.google.fr/index.html HTTP/1.1\r\n"
    "Host: www.google.fr\r\n"; // <- ici
    "\r\n";

  13. #13
    Membre �clair�
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    396
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 396
    Par d�faut
    Grrr tout �a � cause d'un ; en trop...maintenant �a fonctionne.
    Bizzard que le compilateur n'a pas vu l'erreur, non ?

  14. #14
    Membre �prouv�
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    D�cembre 2005
    Messages
    109
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 109
    Par d�faut
    Citation Envoy� par zenux
    Grrr tout �a � cause d'un ; en trop...maintenant �a fonctionne.
    Bizzard que le compilateur n'a pas vu l'erreur, non ?
    Non, il n'y a pas d'erreur de syntaxe ^^

  15. #15
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    normalement c'est GET /index.html et pas GET http://....

  16. #16
    Membre chevronn�
    Inscrit en
    Ao�t 2004
    Messages
    556
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2004
    Messages : 556
    Par d�faut
    Citation Envoy� par loufoque
    normalement c'est GET /index.html et pas GET http://....
    GET http://domaine.ext est tout � fait correcte et d'ailleurs il vaut mieux l'utiliser car sinon tu auras des probl�mes sur les serveurs g�rant plusieurs sites / domaines

  17. #17
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    d'ailleurs il vaut mieux l'utiliser car sinon tu auras des probl�mes sur les serveurs g�rant plusieurs sites / domaines
    L'ent�te Host est faite pour �a...

  18. #18
    Membre chevronn� Avatar de Mayti4
    Inscrit en
    F�vrier 2004
    Messages
    442
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2004
    Messages : 442
    Par d�faut
    Encore mieux : "GET /"

  19. #19
    Membre �prouv�
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    D�cembre 2005
    Messages
    109
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 109
    Par d�faut
    Autant on peut admettre que "GET http://mon.site/index.html" et "GET /index.html" avec l'en-t�te host qui va bien sont �quivalents, autant ce n'est pas vrai avec "GET /"

    La page par d�faut n'est pas forc�ment index.html, mais peut etre index.php, default.asp ou je ne sais quoi. De plus, le comportement de "GET /" n'est pas forc�ment d'afficher une page, �a peut etre de lister le dossier.

    [edit/pour en dessous]
    Oui un listing est aussi une page. Je reprenais la remarque au dessus, et faisais remarquer que "GET /" et "GET /index.html" ne sont pas �quivalents.

  20. #20
    Membre chevronn� Avatar de Mayti4
    Inscrit en
    F�vrier 2004
    Messages
    442
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2004
    Messages : 442
    Par d�faut
    "GET /" renvoie la page par d�faut, un listing est aussi une page, ou est le probl�me.

    Firefox fait �a:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    GET / HTTP/1.1"
    Host: <a href="http://www.developpez.com" target="_blank">www.developpez.com</a>
    ...

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

Discussions similaires

  1. R�ponses: 1
    Dernier message: 30/08/2006, 18h55
  2. socket avec http
    Par djo0012 dans le forum C++
    R�ponses: 10
    Dernier message: 16/07/2006, 01h27
  3. [http] perte de requette http apr�s redirection
    Par okoax dans le forum Serveurs (Apache, IIS,...)
    R�ponses: 6
    Dernier message: 05/05/2006, 10h31
  4. Requette HTTP POST
    Par CrazySeb dans le forum C++
    R�ponses: 7
    Dernier message: 25/02/2006, 15h17
  5. [Servlet] requette http et getParameterValues()
    Par Flobel dans le forum Servlets/JSP
    R�ponses: 8
    Dernier message: 07/01/2005, 11h18

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