begin process at 2012 05 27 15:04:43
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > [C++][W IN]LIBRAIRIE HTTP

[C++][W IN]LIBRAIRIE HTTP


 Information sur la source

Note :
Aucune note
Catégorie :Réseaux & Internet Classé sous :http, requete, get, post, librairie Niveau :Initié Date de création :24/08/2010 Date de mise à jour :24/08/2010 02:09:16 Vu / téléchargé :2 776 / 148

Auteur : nipepsinicolas

Ecrire un message privé
Site perso
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Voila une petite lib HTTP pour faire des requetes sur le web, j'pense qu'on doit pouvoir l'adapter pas trop difficilement sur linux, mais n'ayant jamais dev sur cette plateforme, j'peux pas en dire plus.

Pour l'utilisation de la lib, j'ai pas fait de doc dsl :(

J'explique rapidement en dessous.

Source

  • #include "HTTP/Request.h"
  • HTTP::Request req("google.com"); //le port est déjà définit par défaut (80)
  • HTTP::Response rp; //la réponse de la req
  • HTTP::Args args; //pour def les variables GET ou POST
  • args.AddArgs("mavariable", "lavaleur");
  • TCallback<MaClass> cb
  • cb.SetCallback(this, &MaClass::MaMethod);
  • req.Get/* ou Post */("/index.php", &rp, &args, 0 /* Position de la ou doit commencer le téléchargement du contenu */, &cb, HTTP::SAVE_IN_BUFF /* Sauvegarde le contenu de la page dans le buffer rp.binBody */ | HTTP::AUTO_REDIRECT /* Redirectionne automatiquement si il y a une entête Location: */);
  • /*La methode retourne soit :
  • HTTP::Request::CALLBACK_EXIT = 2 // si le callback demande la sortie
  • HTTP::Request::CONN_ERROR = 0 // si il y a une erreur de connexion
  • HTTP::Request::SEND_ERROR = -1 // Si il y a une erreur lors de l'envoi
  • HTTP::Request::INIT_ERROR = -2 // Si la classe n'est pas initialisée
  • sinon true en cas de succès.
  • Le prototype du callback:
  • DWORD MaClasse::MaMethode(const std::vector<void *>& params)
  • Lors de l'appelle du callback la valeur de params est:
  • __int64 bodySize = *(__int64 *)params[0]; //taille du contenu (peut être égal a 0 si le serveur ne définit pas le content-length
  • int recvSize = *(int *)params[1]; //taille du buffer
  • const char *buffer = (const char *)params[2]; //le buffer avec un morceau du contenu
  • Si on retourne HTTP::Request::CALLBACK_EXIT dans le callback ca stoppera le DL et retourna dans le req.Get() ou req.Post() un HTTP::Request::CALLBACK_EXIT
  • On a les infos sur les entêtes dans HTTP::Response::header donc: */
  • rp.header.GetHttpVersion() // retourne la version de HTTP (string)
  • rp.header.GetHttpCode() // retourne le code Http (int)(ex: 200 / 404 / 403 / etc...)
  • rp.header.GetHttpCodeName() //retourne le nom du code (string)(ex: OK / Not Found / Forbidden / etc..)
  • rp.header.GetHeader(const char *headerName) //retourne un string avec la valeur de l'entête qui a comme headerName
#include "HTTP/Request.h"

HTTP::Request req("google.com"); //le port est déjà définit par défaut (80)
HTTP::Response rp; //la réponse de la req

HTTP::Args args; //pour def les variables GET ou POST
args.AddArgs("mavariable", "lavaleur");

TCallback<MaClass> cb
cb.SetCallback(this, &MaClass::MaMethod);

req.Get/* ou Post */("/index.php", &rp, &args, 0 /* Position de la ou doit commencer le téléchargement du contenu */, &cb, HTTP::SAVE_IN_BUFF /* Sauvegarde le contenu de la page dans le buffer rp.binBody */ | HTTP::AUTO_REDIRECT /* Redirectionne automatiquement si il y a une entête Location: */);
/*La methode retourne soit :
HTTP::Request::CALLBACK_EXIT = 2 // si le callback demande la sortie
HTTP::Request::CONN_ERROR = 0 // si il y a une erreur de connexion 
HTTP::Request::SEND_ERROR = -1 // Si il y a une erreur lors de l'envoi
HTTP::Request::INIT_ERROR = -2 // Si la classe n'est pas initialisée
sinon true en cas de succès.

Le prototype du callback:
DWORD MaClasse::MaMethode(const std::vector<void *>& params)
Lors de l'appelle du callback la valeur de params est:
__int64 bodySize = *(__int64 *)params[0]; //taille du contenu (peut être égal a 0 si le serveur ne définit pas le content-length
int recvSize = *(int *)params[1]; //taille du buffer
const char *buffer = (const char *)params[2]; //le buffer avec un morceau du contenu

Si on retourne HTTP::Request::CALLBACK_EXIT dans le callback ca stoppera le DL et retourna dans le req.Get() ou req.Post() un HTTP::Request::CALLBACK_EXIT

On a les infos sur les entêtes dans HTTP::Response::header donc: */
rp.header.GetHttpVersion() // retourne la version de HTTP (string)
rp.header.GetHttpCode() // retourne le code Http (int)(ex: 200 / 404 / 403 / etc...)
rp.header.GetHttpCodeName() //retourne le nom du code (string)(ex: OK / Not Found / Forbidden / etc..)
rp.header.GetHeader(const char *headerName) //retourne un string avec la valeur de l'entête qui a comme headerName

 Conclusion

J'espère que ca vous sera utile, je n'ai pas trop le temps de la mettre a jour mais vos remarques sont bienvenue :), je modifierais quand je pourrais.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

24 août 2010 02:09:16 :
Correction de Source

 Sources du même auteur

Source avec Zip SERVEUR MULTITHREAD [LINUX/WIN]
Source avec Zip CONVERTIR FLV 2 MP3

 Sources de la même categorie

Source avec Zip Source avec une capture MINI SERVEUR HTTP [WINDOWS] par ganjarasta
Source avec Zip Source avec une capture CLIENT DE TEST MODBUS TCP par brunovan
Source avec Zip Source avec une capture SCANIP [ARP / ICMP] par ganjarasta
Source avec Zip Source avec une capture TRACEROUTE [WINPCAP] par ganjarasta
Source avec Zip SERVEUR MULTITHREAD [LINUX/WIN] par nipepsinicolas

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture MINI SERVEUR HTTP [WINDOWS] par ganjarasta
Source avec Zip ASPIRATEUR RÉCURSIF MACOS par tontonCD
REMOTE POST PHP WITH SOCKET LINUX par 0x0syscall
Source avec Zip Source avec une capture [C, WIN32/LINUX] LIB POUR TRAVAILLER DES IMAGES BITMAPS par katsankat
Source avec Zip [DEV-CPP]ARCHIVAGE DES LIENS D'UNE RECHERCHE SUR GOOGLE par sebastienmz

Commentaires et avis

Commentaire de shenron666 le 25/08/2010 20:03:21

si tu ne connais pas libcurl, vas voir ici : http://curl.haxx.se/libcurl/
les portages sont ici  : http://curl.haxx.se/download.html

Commentaire de nipepsinicolas le 31/10/2011 04:00:15

Oui merci, je connaissais, c'était surtout pour en apprendre un peu plus sur les sockets et le protocol HTTP.
D'ailleurs je déconseille l'utilisation de ma lib, qui a quelques fuites de mémoire.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Analyse fichier log a faire en C [ par Nexouille ] A l'aideeeeeeeeeeeeeeeeeeeeeeeeee***************************************Les serveurs web enregistrent la trace des visites dans des fichiers de log. C timeout client Http [ par houssadotcom ] Bonjour,mon programme fait des requetes http avec les classes Atl,mon probleme est que certaine requete http ne reponde pas et je voudrais qu'il y ai timeout client Http [ par houssadotcom ] Bonjour,mon programme fait des requetes http avec les classes Atl,mon probleme est que certaine requete http ne reponde pas et je voudrais qu'il y ai le http post OK. Mais pour un UPLOAD de fichier ? [ par pdessoulles ] Salut à tous,Le problème suivant me pourrit la vie depuis quelques jours :J'arrive bien à envoyer des données sur une socket ouverte sur un serveur ht Socket + http [ par Akylon ] Voila je veux recuperer des documents par le protocole http avec la fonction suivante: void traitement(SOCKET client){ int lg; char* requete="GE Methode POST dans le protocole HTTP [ par ramzich ] Bonjour,j'ai developpé un serveurHTTP en C++ ki pr l'instant traite qu'un demande GET venant d'un navigateur WEB.Je veux evoluer ce serveur pour kil t Comment installer la librairie GMP? [ par Kentoo ] Bonjour à tous!J'aimerais savoir Comment installer la librairie gmp? J'utilise dev-c++ et je suis sous windowspour ceux qui ne connaissent pas: http:/ requete avec GET conditionele [ par casper_2 ] excuser g des soucis avec ma requete conditionnelle,g appliker ceci :GET /users/charles@mimi.fr/provisoires_vpn.ZIP HTTP/1.1 \nIf-Modified-Since: Thu, serveur HTTP/1.0 methode GET [ par Trascal ] Dans le cadre d'un projet au sein de mon BTS informatique je doit créer l'algorithme d'un serveur HTTP/1.0 en ne s'occupant que (principalement) de la requete http sur www.imdb.com [ par InsAne0 ] Bonjour tout le monde,Je voudrais pouvoir telecharger page du site www.imdb.com tel que http://www.imdb.com/title/tt0062622/ par exemple.Mais je pense


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales