Librairie C pour récupérer du contenu web

Fermé
Thechooz Messages postés 28 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 2 mai 2009 - 4 juil. 2008 à 10:20
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 4 juil. 2008 à 14:57
Bonjour,
je m'apprête à écrire en C un programme que je distribuerai exclusivement à mes potes pour leurs permettre de préécouter et télécharger facilement des mixs de ma composition que je met régulièrement à leur disposition sur internet.
J'aurais donc besoin d'une librairie permettant le téléchargement de fichiers en provenance du web, en l'occurence des fichiers texte (xml/html), des zip et des .mp3.
Voilà et puis si au passage vous avez un tuto c'est pas de refus, sinon pas grave google is my friend ou bien je me contenterais de la doc !
Merci d'avance !
Thechooz
A voir également:

3 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
4 juil. 2008 à 10:33
j ai fait un petit truc comme ca, je m en sert actuelement pour un projet.

Je ne te fournirai pas le code, mais je peux te guider.
tu utilises des sockets, tu te connectes sur ton serveur (ip, port80) en TCP

regardes la RFC du protocole HTTP

tu envoies comme requete "GET /fichier.xml HTTP/1.0\r\n\r\n"
et comme reponse tu aura HTTP/1.1 200 OK et plein de lignes avec les headers...

verifies que tu ai bien le code 200, et pas une erreur 404 par exemple (regardes les codes erreur HTTP)

chaque header se finit par \r\n
le dernier header se finit paar 2 fois \r\n et ensuite commence ton fichier

la taille du fichier t es donné par content-length.

ce programme n est psa difficile a faire, je te coneille de le faire par toi meme, tu en tirera une plus grande joie.
Personelement j utilise les sockets MFC (je sais, c est pas bien), et pas les socket traditioneles ...

si tu as d autrse questions, n hesite pas

ha oui. Je te conseille d utiliser ethereal pour expionner les donnés que tu envoies et recoit du réseau!
il t aidera a comprendre le fonctionnement.

Commence avec un simple fichier texte, avant de passer aux donnés binaires (plus facil pour voir ce qui se passe...)
0
Thechooz Messages postés 28 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 2 mai 2009 1
4 juil. 2008 à 14:49
Merci de ta réponse ! Mais... ouahh tu me parle chinois !
Désolé mais la programmation je m'y suis mis il y a pas très longtemps... Et les réseaux je suis vraiment pas assez calé pour comprendre tes explications.
J'ai cherché un peu sur google avant de poster et j'avais trouvé une librairie (libcurl) qui permettait à peu près ça mais apparemment elle ne permet de télécharger que les pages html. Donc j'avais espéré qu'il pouvait en exister une autre permettant de télécharger à peu près n'importe quel autre fichier... Le but étant de se passer des sockets, qui pour moi ne sont qu'un nom vaguement déjà vu ailleurs !
Bon du coup si d'après toi ce manque de connaissances risque de m'empecher de programmer ça, dis-le moi stp que je perde pas mon temps (ou reporte moi sur une petite doc explicative ce serait cool).

Merci !
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
4 juil. 2008 à 14:57
es ce que tu utilises visual studio ou un autre compilo ?

je te conseille d apprendre a utiliser les socket, vu que c est la base de la communication reseau.

tu cree une socket SOCK_STREAM (c est du TCP) car c est ce qui est utilisé par le protocole HTTP.
il te demande l ip et le port sur lequel connecter. tu met l IP de ton serveur web, et le port 80 (ca doit etre la fonction connect).

ensuite, tu fais un petit char requete[]="GET / HTTP/1.1\r\n\r\n";
tu fais un envoi qui doit ressembler a ca send (requete, strlen(requete)); ou send (masocket, requete, strlen(requete))

ensuite tu fais une receptioon dans un buffer, et tu traite ton buffer.. affiches le dans un premier temps pour voir ce que ca fait.

utilises wireshark pour voir si tes donnés sont bien envoyés sur le réseau
0