Requette

Résolu
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010 - 7 juil. 2006 à 21:49
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010 - 9 juil. 2006 à 23:53
bonjous, voila, j'ai trouvé un code sur ce site qui permet de faire une requette html (port 80) sur un server, sauf que je voudrai savoir comment faire une requette sur une page de se serveur:
voici le code : 

 #include<fstream.h>
 #include
 #include<winsock.h>
 #pragma comment(lib, "ws2_32.lib")
 
int main()
    {
         WSADATA WSAData;
         WSAStartup(MAKEWORD(2,0), &WSAData);
          SOCKET sock;
         SOCKADDR_IN sin;
       char buffer[1024];
     char canal[50] = "GET / HTTP/1.0\nAccept: */*\n\n"; /*<------a changer par exemple enhttp://annuaire.freebox.fr/annuaire/ mais cela ne fonctionne pas, aucune réponce, comment pourrai-je faire ?*/
         ofstream log("protsock.log"); // fichier pour enregistrer les données reçues.
 
 
         sock = socket(AF_INET, SOCK_STREAM, 0);   
    
         sin.sin_addr.s_addr = inet_addr(212.27.48.10); // site web (www.free.fr)
         sin.sin_family = AF_INET;
         sin.sin_port = htons(80); // port HTTP.
 
         connect(sock, (SOCKADDR *)&sin, sizeof(sin)); // on se connecte sur le site web.
     send(sock, canal, strlen(canal), 0); // on envoie la requête HTTP.
     int i = recv(sock, buffer, sizeof(buffer), 0); // le buffer récupère les données reçues.
 
 
         if (i != 0) // si le buffer reçoit des données.
         {
         log << buffer <<  "\n";
         cout << buffer;
         system("pause");
         // enregistrement des données dans le fichier.
         }
         if (i ==0)
         log << "aucune donné n'est parvenue\ndsl\a";
           
          closesocket(sock); // on ferme le socket.
         WSACleanup();
     }

Je vous remerci d'avance et vous souhaite une bonne journée ;-)

18 réponses

katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
8 juil. 2006 à 13:38
Salut baby :)


En HTTP, quand tu fais GET / tu demandes la page root, symbolisée par /.

Par conséquent pour obtenir truc.html situé dans un autre dossier ce serait
GET /machin/truc.html


Ceci étant dit,
Si tu veux obtenir une ressource d'un sous-domaine,
http://annuaire.freebox.fr/annuaire/
Notes qu'il n' y a pas de www dansl' URL! Comme il s' agit d'un sous-domaine (hôte virtuel) il FAUT spécifier le Host dans la requête HTTP, pour pouvoir ensuite demander un
GET /annuaire/


Infos détaillées sur la RFC 2616!


PS le code n'obtiendra que le premier paquet, faudra revoir ça aussi.


Bonne prog
3
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 juil. 2006 à 17:20
Salut,

Comme la requette est en HTTP/1.0, on peut mettre directement toute l'url dans le GET.

Sinon pour demander http://annuaire.freebox.fr/annuaire/  c'est l'adresse de annuaire.freebox.fr qu'il faut mettre dans le inet_addr et non pas celle de www.free.fr.
3
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 juil. 2006 à 18:11
Salut,

On met pas n'importe quoi dans une requete http, y'a un format à respecter:

Essaye:

char canal[] = "GET www.google.fr/imghp?hl=fr&tab=wi&q= HTTP/1.0\r\n\r\n";


Sinon le code est vraiment bidon, aucun traitement d'erreur, quasiment
aucun affichage, c'est pas le mieux pour debuger un code qui marche pas.
3
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
8 juil. 2006 à 18:23
Toujours aussi bon ce cher aardman.


Si connect() retourne quoi que ce soit d' inférieur à 0: la connection n'est pas établie.

Toujours terminer sa requête HTTP par CRLF CRLF (\r\n\r\n).


Vas-y t'y es presque. Consultes au moins une fois la RFC.
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
8 juil. 2006 à 20:08
RFC c'est "Request For Comments", l' établissement de standards pour
les protocoles de l' internet, avec l' ouverture que la traduction
évoque. Le W3C s'y accolle.


Google RFC 2616 ça te donnera la spécification du protocole HTTP 1.1. Et la RFC 1945 pour le proto HTTP 1.0.

Ces documents, en anglais, décrivent le protocle HTTP.


Pour la RFC 2616 (HTTP/1.1) vas directos à la section 5.1.2 elle parle du Host.


Après ça t'es bon, bonne prog.
3
Utilisateur anonyme
9 juil. 2006 à 08:32
A mon avis tu n'as aucune reponse et comme ton buffer n'a rien recu et qu'il n'est pas initilaliser, il n'a pas le caractaire \0 de fin.
Du coup c'a t'affiche du nimporte quoi....( ceux qui  est present dans l'espace memoire alloué a ton char)

MaLaDeDeDe 97one 
3
Utilisateur anonyme
9 juil. 2006 à 17:34
J'ai un code qui marche ca me renvoi l'ip, je l'ai trouvé sur le site.
On fait une requette pour le fhichier ip.php et ce fichier nous retourne notre ip.
Aprés par la suite le code nous isolé l'ip dans un char.

sprintf(Buffer, "%s", "GET http://siteayoyo.free.fr/ip.php HTTP/1.0\n\n"); 
    send(W_IP, Buffer, strlen(Buffer), 0);
    recv(W_IP, Buffer, sizeof(Buffer), 0); 

MaLaDeDeDe 97one 
3
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010
8 juil. 2006 à 14:25
merci pour ces précisions , C'est koi la RFC ? Si ill s'agit d'un sous-domaine, comment peut on spécifier le host dans la requette ?

Merci encor
0
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010
8 juil. 2006 à 14:42
j'ai essayé de faire sa :
char canal[50] = "GET /infomsg_REQUETTE_775402.aspx#2 "  ;
et l'ip : 213.161.194.215 <----ip du site,
aucune réponce;

Pourquoi sa ne fonctionne pas  ?
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
8 juil. 2006 à 14:48
SVP ne pas tester ses applications réseau sur cppfrance c'est le
minimum syndical. Faire sur sa page perso par exemple. Ou
microsoft.com, ou google.fr.
0
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010
8 juil. 2006 à 14:50
dsl, je ne savait pas,
0
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010
8 juil. 2006 à 17:44
je ne comprend pas (j'ai suivi vos instruction + changé de server)  : voici mon code: 

#include<fstream.h>
 #include
 #include<winsock.h>
 #pragma comment(lib, "ws2_32.lib")
 
int main()
    {
         WSADATA WSAData;
         WSAStartup(MAKEWORD(2,0), &WSAData);
    
         SOCKET sock;
         SOCKADDR_IN sin;
 
     char buffer[1024];
     char canal[50] = "Get / www.google.fr/imghp?hl=fr&tab=wi&q=";
         ofstream log("protsock.log"); // fichier pour enregistrer les données reçues.
 
 
         sock = socket(AF_INET, SOCK_STREAM, 0);   
    
         sin.sin_addr.s_addr = inet_addr("66.249.91.104"); // site web www.google.fr
         sin.sin_family = AF_INET;
         sin.sin_port = htons(80); // port HTTP.
 
         connect(sock, (SOCKADDR *)&sin, sizeof(sin)); // on se connecte sur le site web.
        
         send(sock, canal, strlen(canal), 0); // on envoie la requête HTTP.
     int i = recv(sock, buffer, sizeof(buffer), 0); // le buffer récupère les données reçues.
    


 
         if (i != 0) // si le buffer reçoit des données.
         {
         log << buffer <<  "\n";
          cout <<"sa marche";
         cout << buffer;
         system("pause");
       
         // enregistrement des données dans le fichier.
         }
         if (i ==0)
         log << "aucune donné n'est parvenue\ndsl\a";
        cout <<"\npas de réponce\n";




 if (i != 0) // si le buffer reçoit des données.
         {
         log << buffer <<  "\n";
          cout <<"sa marche : ";
         cout << buffer <<"\n";
         system("pause");
       
         // enregistrement des données dans le fichier.
         }
          closesocket(sock); // on ferme le socket.
         WSACleanup();
     }
0
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010
8 juil. 2006 à 19:55
merci beaucoup, beaucoup, beaucoup, beaucoup, ..., je croi que maintenant j'ai aumoin une réponce du server.

Ps: c'est koi la RFC (comme msdn ?)
0
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010
8 juil. 2006 à 20:12
merci,

encor juste une petite dernier question, pk quand je met une adresse qui existe comme : www.google.fr/imghp?hl=fr&tab=wi&q=

et que aprés quand j'en met une autre (qui n'existe pas comme www.gooooooooogle.fr/imghp?hl=fr&tab=wi&q=) la réponce du server est la même ?

c'est celle la : á?|+¤?|3?|Ð4

aprés sa je ne vous embète plus, promis ;)
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
8 juil. 2006 à 20:21
Vois une des sources de aardman ou des miennes pour ça.
0
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010
9 juil. 2006 à 13:11
exacte, j'ai mis un netoyage avant le recv : memset(buffer,0,sizeof(buffer));, et a la sortie mon prog m'affiche que mon buffer est nul, donc je n'ai pas u de réponce (snif), j'y arriverai jamais
0
Utilisateur anonyme
9 juil. 2006 à 17:25
Mais si tu as dit que si c'est une vrai adresse ca marche.
Alors je vois pas ou est le probleme.

MaLaDeDeDe 97one 
0
baby3378 Messages postés 193 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 8 juillet 2010
9 juil. 2006 à 23:53
Un grand merci, j'avait trouvé la source qui marchait et j'ai réctifié l'erreur dans mon prog, mais je m'été di que je la mettrai  (la solution) sur le site plus tard.

Merci quand même,

bonne prog a tous ;-)

PS: Pour toute remarque je ne pourrait vous répondre avant 3 jours
0
Rejoignez-nous