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 ?
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 ?
Oui c'est possible suffit d'envoyer une requete Http ( POST ou GET pour r�cuperer)
Pas d'exemple sous la main maisdoit avoir cela en stock
![]()
Il y a aussi quelques exemples dans le forum ...
Merci pour vos r�ponses mais j'ai un probl�me...
Voici mon code:
Fonction membre de ma classe:
Dans main:
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; } .... }
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 ?
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);
Merci...
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";
Ok, je vien d'ajouter le \r\n mais �a ne change rien au probl�me.
mais �a me parait tout � fait normal. Tous ce qui est envoy� suivant le protocole HTTP est envoy� par TCP.Envoy� par zenux
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 ?
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
Simple question : tu te connecte bien sur le port distant 80 ?
Le constructeur de ma classe:
Dans main:
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; } }
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;
je viens de faire l'essai. J'ai pris la requ�teet je r�cup�re bien la page.
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";
D'abord un conseil :
Tu ferais mieux de d�clarer ip en const char *.
Code : S�lectionner tout - Visualiser dans une fen�tre � part requete(char *ip, int port)
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";
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 ^^Envoy� par zenux
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 / domainesEnvoy� par loufoque
L'ent�te Host est faite pour �a...d'ailleurs il vaut mieux l'utiliser car sinon tu auras des probl�mes sur les serveurs g�rant plusieurs sites / domaines
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.
"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> ...
Partager