Requète http

Signaler
Messages postés
36
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
11 septembre 2005
-
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007
-
Je travail sous Dev-C++ et je voudrais faire une requète http sous une console, pas de fenètres windows. Je connais les commandes sous Visual C++ mais je veux faire une requète par Dev-C++ puisqu'il est gratuit. Merci d'avance.


StevenJLMunn

4 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
C'est le même principe sous VC++ et sous Dev-C++: tu utilises winsock dans les deux cas, et pour envoyer une requete tu utilises la fonction send
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

Voilà un exemple qui fonctionne avec Dev-cpp:



#include <stdio.h>

#include <stdlib.h>

#include <winsock2.h>

#include <string.h>



SOCKET sock; // Socket Client



bool MakeClient(char * addr,unsigned short port){

WSADATA WSAData;

WSAStartup(MAKEWORD(2,0), &WSAData);



SOCKADDR_IN sin;

sock = socket(AF_INET, SOCK_STREAM, 0);



/*remplacer l'ip par celle de la machine possédant le serveur*/

sin.sin_addr.s_addr = inet_addr(addr); // IP du serveur

sin.sin_family = AF_INET;

sin.sin_port = htons(port);



// Envoie d'une requete de connetion

if(connect(sock, (SOCKADDR *)&sin, sizeof(sin))!=0){

printf("Aucune Connection Trouvée\n");

return 1;

}else{

printf("Connection Etablie\n");

return 0;

}

}



void EndClient(){

// Fermeture de la session TCP Correspondant à la commande connect()

shutdown(sock,2); // 2 signifie socket d'émission et d'écoute



// Fermeture de la socket correspondant à la commande socket()

closesocket(sock);



// Quitte proprement le winsock ouvert avec la commande WSAStartup

WSACleanup(); // A appeler autant de fois qu'il a été ouvert.

}



int main()

{

char buffer[65535];

memset(buffer,0,65535);



// Connexion à www.google.com

MakeClient("66.249.85.104",80);



//Envoie une requete (à la place du / on peut mettre le nom d'une page ex: /index.php)

send(sock,"GET / HTTP/1.0\n\r\n\r",93,0);



// Reçoit les données

recv(sock, buffer, sizeof(buffer), 0);



// Affiche la réponse du serveur

printf("%s",buffer);



// Termine la connexion

EndClient();



system("pause");

}



N'oublie pas d'ajouter la librairie ws2_32
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Alcantornet> WSAStartup ne doit etre initialisé qu'une seule fois au démarrage du programme, puis libérer une fois le programme terminé.

Sauf si tu en as besoin que dans une fonction locale. Dans ce cas la tu le charge et le libère dans ta fonction.

Avec ta méthode, si tu crées un serveur multiuser, tu peux etre sur que la deuxieme demande de connexion echouera.

Pour plus de sécurité il faut aussi que tu controles la valeur de WSAData.
Puis évite aussi d'appeller les variables par le type (WSADATA WSAData).

Sinon le code est bon.

Shell
Messages postés
89
Date d'inscription
mardi 8 février 2005
Statut
Membre
Dernière intervention
14 novembre 2007

Ok merci de tes conseilles