begin process at 2010 02 10 15:12:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > YOYODOWN - TÉLÉCHARGEMENT HTTP [DEV-C++ 4.9.9.2]

YOYODOWN - TÉLÉCHARGEMENT HTTP [DEV-C++ 4.9.9.2]


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Classé sous :yoyodown, télécharger, téléchargement, http, devc Niveau :Débutant Date de création :17/02/2007 Date de mise à jour :25/02/2007 14:16:22 Vu / téléchargé :5 094 / 794

Auteur : yoyo269

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

 Description

Cliquez pour voir la capture en taille normale
Comme le titre l'indique, ce petit programme est un téléchargeur HTTP.
Vous rentrez l'URL complète du fichier à télécharger et vous précisez le dossier où il sera sauvegardé. Plus qu'à cliquer sur 'Télécharger' et attendre...Zzzzzzzz !
Ceux que j'ai vu sur le site me paraissaient bien compliqués par rapport à ce qui est nécessaire.
Si vous voyez quelque chose qui n'est pas correct (mauvais respect du protocole, bugs, ....) hésitez pas à me le signaler.
Je ne prétends pas avoir fait quelque chose de nickel chrome, loin de là (sûrement codé trop vite :p) !


 Conclusion

Pensez à renommez l'exécutable de *.ex_ en *.exe.

 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

18 février 2007 11:31:30 :
- Ajout des CloseHandle() nécessaires ; - Proposition d'ouverture ou non du fichier, à la fin du téléchargement.
23 février 2007 14:45:26 :
- Correction du souci pour certains téléchargements (URL spécifiée par deck_bsd) => passage aux requêtes HTTP v1.1 au lieu de 1.0 ; - Amélioration des messages d'erreurs ; - Ajustements sur l'interface.
25 février 2007 14:16:22 :
- Affichage du débit instantané ; - Arret du calcul du débit quand en pause ; - Prise en charge des URL redirigées.

 Sources du même auteur

Source avec Zip Source avec une capture YOYOMD5 - CALCUL ET AFFICHAGE DE LA CLEF MD5 D'UN FICHIER
Source avec une capture SCANNER DE DISQUES (RECURSIF)
Source avec Zip Source avec une capture TRACÉ DE COURBES À PARTIR D'UN FICHIER TEXTE (GDI)
Source avec Zip Source avec une capture YOYOCUT 2 - DÉCOUPE FICHIER [VISUAL C++ 2005 EXPRESS]
Source avec Zip DIFFUSION D'UN WAVE PAR RTP !!! [DEV-C++]

 Sources de la même categorie

Source avec Zip TIM_RESEAU, CLASSES POUR RESEAU COMPLET par williamallas
Source avec Zip INTERNET IP FINDER TROUVER VOS ADRESSE IP (INTERNET) par xmustapha
Source avec Zip CLIENT/SERVEUR AVEC TSOCKETSERVER & TCLIENTSOCKET par xmustapha
Source avec Zip REMOTE SHELL GEN par ganjarasta
PROXY IRC SIMPLE (WINDOWS/WINSOCK) par _michel

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture [C/WIN32] REJOINDRE UN AMI SUR COD2 (CALL OF DUTY 2) par katsankat
Source avec Zip [DEV-CPP]ARCHIVAGE DES LIENS D'UNE RECHERCHE SUR GOOGLE par sebastienmz
Source avec Zip Source avec une capture [C/WIN32] TÉLÉCHARGEMENT DE FICHIER AVEC API SEULEMENT. par deck_bsd
Source avec Zip Source avec une capture TELECHARGER UN FICHIER (WIN32) par magma
Source avec Zip Source avec une capture OBTENIR SON IP INTERNET !!! par yoyo269

Commentaires et avis

Commentaire de SAKingdom le 17/02/2007 18:04:56

Tu ne ferme pas hTelechargement avec CloseHandle?

Commentaire de yoyo269 le 17/02/2007 18:13:16

Bien non !
Où me conseillerais-tu de mettre le CloseHandle ?
J'ai pensé à la fin du thread (juste avant le return 0;), mais j'ai un gros doute. :(

YOYO, @+.

Commentaire de BruNews le 17/02/2007 21:24:13 administrateur CS

C'est viable en sortie de thread.

Commentaire de sterkasor le 18/02/2007 11:20:19

je veux cacher par exemple le url de telechargement pour mettre url d'un fichier sur mon site qui sera fix (on pourra pas changer url de fichier), ou je dois modifier?

Commentaire de sterkasor le 18/02/2007 11:22:10

et lancer automatiquement le fichier telecharger a la fin de telechargement.
meme si c'est possible fermer le ton prog?

Commentaire de yoyo269 le 18/02/2007 11:35:15

Source modifiée !
Sterkasor, si tu veux fixer l'url du fichier, fixe la valeur de la variable qui corresponde à l'url.
Tu n'as qu'à remplacer ceci :
strcpy(Chemin, PrendreTexte(TextBoxhWnd[1]));
par cela :
strcpy(Chemin, "http://serveur/dossier/sous-dossier/nom_fichier.ext");

Pour l'ouverture du programme, j'ai modifié la source pour que l'ouverture soit proposée à l'utilisateur.

YOYO, @+.

Commentaire de deck_bsd le 18/02/2007 12:27:05

Bonne source yoyo :) comme toujours, Tu es en 64 bits? car si tu ne l'es pas, je comprend pas trop alors l'utilisation d'un atoi64 par rapport à l'utilisation d'un atoi standart ?


++ Yoyo

Commentaire de yoyo269 le 18/02/2007 13:02:52

Salut deck_bsd et merci ! ;)
Le atoi64 c'est au cas où le fichier fait plus de 4 Go. C'est rare, c'est vrai, mais une image DVD dépasse cette valeur.
Donc ce n'est pas codé en 64 bits, mais certaines variables gérant la taille du fichier sont codées sur 64 bits.
Du coup avant de dépasser la valeur max d'un entier de 64 bits...les poules auront des dents !!!

YOYO, @+.

Commentaire de sterkasor le 18/02/2007 14:58:48

Salut YOYO269
merci j'ai essaye cela fonction bien!
j'utilise Dev-C++ je ne sais pas comment supprimer la zone d'url?
que je dois faire pour cela?

merci

Commentaire de sterkasor le 18/02/2007 15:14:18

Re,
je n'ai toujours pas reussi a lancer le telecharge a la fin de telechargement :=(

Commentaire de sterkasor le 18/02/2007 16:04:34

CloseHandle() doit etre placer ou exactement?

Commentaire de yann_lo_san le 18/02/2007 18:38:27

Bonne source ! je te mets 8/10.

Commentaire de yoyo269 le 18/02/2007 23:09:28

Merci yann_lo_sann, c'est sympa ! ;)
Sterkasor > Le CloseHandle(), pour le trouver fais une recherche il est dans le code source mis à jour.
Si tu parles d'ouvrir le fichier à la fin du téléchargement, cela est proposé dans le code mis à jour.
Enfin pour enlever la zone de texte où tu rentres l'URL, regarde du côté de la fonction CreerInterface().

YOYO, @+.

Commentaire de sterkasor le 19/02/2007 00:28:03

Merci YoYo269,
c'est parfait! exactement comme je cherchais :)


@+

Commentaire de gamemonde le 21/02/2007 01:55:00

Tres bonne source code mais je ne vois que des fichiers h et un fichier cpp

Très interessent cela permet de faire beaucoup de chose un update menager...


salut

Commentaire de yoyo269 le 21/02/2007 11:19:05

Merci Gamemonde !
Effectivement il y a bcp de .h et peu de .cpp.
C'est une mauvaise habitude que j'ai prise, et que je suis en train d'essayer de modifier.
Donc évitez de prendre exemple sur cette 'technique'.
En effet, cette source est (je pense) une bonne base pour pouvoir faire de nombreuses choses, diverses et variées (gestionnaire de téléchargements, fonction de mise à jour, ...).
En ce moment, j'essaie d'ajouter le téléchargement par FTP, mais c'est beaucoup plus complexe.
Ce que j'ai fait, pour l'instant, marche, mais sur une patte. ;-)
A suivre...

YOYO, @+.

Commentaire de Dr_Progz le 21/02/2007 14:38:52

J'ai essayer de compiler ton programme sous Visual C++ 6, mais cela ne marche pas, je te donne des modification a faire pour rendre ton programme compatible DevC++ et MSVC :

- Dans le fichier 'Fichiers_Dossiers.h' : ajoute en haut
#ifndef INVALID_FILE_ATTRIBUTES
#define INVALID_FILE_ATTRIBUTES (DWORD (-1))
#endif
#ifndef BIF_NEWDIALOGSTYLE
#define BIF_NEWDIALOGSTYLE 0x0040
#endif

- Dans le fichier 'YoyoDown.h' : dans la fonction 'FenetreProc' : dans la 'case WM_CTLCOLORSTATIC' : retire la declaration de i de la for, tu met int i; for....

en fin pour le linker utiliser la lib 'ws2_32.lib'

Comme ca le programme sera compilable sous MSVC et Dev.

Autre chose : La fonction 'ModifURL' est mal codée :

char *ptr = URL;
while (*ptr)
{
char c = get_stand_char(*ptr);
if (c != -1)
{
*ptr = c;
ptr++;

char *ptr2 = ptr;
while(*(ptr2 + 2))
{
*ptr2 = *(ptr2 + 2);
ptr2++;
}
*ptr2 = 0;
}
else
ptr++;
}

char get_stand_char(char* s)
{
switch (*s)
{
case '%0':
switch (*(s+1))
{
case '9': return ('\t');
.
.
.
}
break;
.
.
}

return (-1);
}

Commentaire de deck_bsd le 21/02/2007 16:09:35

okidoki yoyo, merci pour ton explication :D

Commentaire de deck_bsd le 22/02/2007 19:00:07

re yoyo , juste pour signaler que avec un lien de ce type :

http://www.atlence.com/calculre/[atlence]_code_des_couleurs_des_resistances.pdf

le programme me met URL invalide.

Commentaire de yoyo269 le 22/02/2007 19:07:25

Ah super ça Deck_bsd !
Je regarde ça de plus près et je vous tiens au courant.
je pense pas que ça soit bien méchant. ;)

YOYO, @+.

Commentaire de sterkasor le 23/02/2007 12:23:37

Sans demander au utilisateurs comment on peut lancer le fichier telecharger? et fermer l'appli a la fin de telechargement?

Commentaire de yoyo269 le 23/02/2007 12:44:53

Désolé Sterkasor mais faut pas abuser.
Si tu ne vois pas comment faire ce que tu me demandes, faut sincèrement penser à apprendre le C et à faire des recherches.

Sinon deck_bsd, c'est pas un cadeau que tu m'as fait avec ton URL ! :p
Le serveur me répond en disant que le fichier est temporairement déplacé et donc je récupère la nouvelle URL qu'il me fournit, me reconnecte à cette nouvelle URL et envoie la requête.
A chaque fois, il me dit que le fichier a temporairement changé d'URL.
Je continue à chercher. Je sens que je vais apprendre des trucs. ;)

YOYO, @+.

Commentaire de sterkasor le 23/02/2007 12:48:29

Desole yoyo269!
mon but etait apprendre jsutement.

merci

Commentaire de yoyo269 le 23/02/2007 12:52:20

Si tu veux apprendre, cherche des tutoriaux en C et procure toi un bouquin de C. C'est le mieux.
Un conseil ne grille pas les étapes en voulant apprendre trop vite.
Je sais c'est frustrant, mais si par exemple tu n'arrives pas à maitriser le principe de boucle et de condition ou encore bien différencier les différents types de variables, ça va être (TRES) difficile pour le reste, voire impossible.

YOYO, @+.

Commentaire de yoyo269 le 23/02/2007 14:56:22

Mise à jour faite !

Deck_bsd > Ca y est le problème semble corrigé. En fait, avant j'utilisais des requêtes HTTP 1.0 et visiblement en utilisant des requêtes HTTP 1.1, ça passe ! ;)
Hésite pas à tester encore et encore pour trouver autre chose qui cloche. :p

Dr_progz > Merci pour les infos d'adaption, mais je laisse à chacun le soin d'adapter à ça guise. En tous cas, ils sauront où regarder pour pouvoir compiler sur VC++. ;)
Dans cette mise à jour, j'ai également modifié la fonction ModifURL(), dont tu avais parlé.
Je l'avais codée comme un barbare, façon brute de décoffrage. lol
En prenant ta méthode (et en corrigeant une petite erreur pas méchante), je l'ai incluse dans le code.

YOYO, @+.

Commentaire de deck_bsd le 23/02/2007 16:18:43

Bien joué yoyo :D


Ne te tracasse pas pour cela, j'en ai encore un je pense :D Mais je ne suis pas chez moi donc je te dirai ça ce soir ou demain.

Commentaire de yoyo269 le 23/02/2007 18:23:57

J'ai hâte de voir ça !
Bon sang, qu'est-ce qu'il va me sortir encore ??? LOL :D

YOYO, @+.

Commentaire de yoyo269 le 25/02/2007 14:18:43

Nouvelle mise à jour !
Prise en charge des URL redirigées.
Merci à toi Deck_bsd pour m'avoir dégoter des URL avec lesquelles ça foirait.
Hésite pas à en chercher d'autres ! ;)

YOYO, @+.

Commentaire de Space_Monkey le 25/02/2007 20:12:24

Heuu si c'est pas trop demander, on pourrait avoir le contenu de cette modification concernant les redirections? ^^
Merci d'avance Yoyo!

Commentaire de yoyo269 le 25/02/2007 20:40:33

Ben c'est dans le code source Space_Monkey !
Il y a un commentaire qui dit quelque chose de ce genre : "// Vérification s'il y a redirection"
Je ne vois pas très bien ce que tu veux dire. :(

YOYO, @+.

Commentaire de Space_Monkey le 25/02/2007 21:12:50

Désolé j'ai pas été très explicite.. Voici le contenu de la mise à jour. J'ai laisser que les comentaires, sauf la condition du if et le goto qui d'après moi sont importants à signaler pour bien comprendre.

// On vérifie s'il y a une redirection
if(Tmp[0] == '3' && Tmp[1] == '0' && (Tmp[2] == '1' || Tmp[2] == '2'))
{
// On ferme la connexion actuelle
// on récupère la nouvelle URL
// On modifie l'URL affichée
goto Reconnexion;
}

Ensuite j'ai plusieurs questions à poser:
- Je ne comprend pas ton test, comment peux tu en déduire qu'il s'agit d'une redirection?
- Cette question est en lien étroit avec la premiere: Quelle est la différence (au niveau html) entre une url simple et une url avec redirection?
-Les pages générées lors des redirections sont elles standard et te bases tu là dessus pour effectuer ton test?

Je ne penses pas qu'il faille répondre à chaque question indépendament. J'ai bien fait une recherche sur le sujet mais à chaque fois j'en revient à la meme question: Pourquoi ton test semble-t-il simple alors que les méthodes de redirections sont variées? (avec Apache, en html, en php, ...)

Commentaire de yoyo269 le 25/02/2007 21:57:14

Alors là Space_monkey, il faut étudier le protocole HTTP.
Voilà une page qui devrait t'aider :
http://www.commentcamarche.net/internet/http.php3

En fait quand tu envoies une requête HTTP (GET http://balbla.fr/blabla etc...), la réponse que tu reçois contient un code à 3 chiffres (voir lien donné).
Et c'est avec ce code que tu sais à quoi tu as affaire (redirection : 30x).
Les codes ne sont pas parfaitement gérés dans mon programme, mais tu en vois un exemple.
Et dans le cas d'une redirection, l'entête de la réponse contient un champ "Location: ", qui te donne la nouvelle URL avec laquelle tu dois effectuer une nouvelle requête.

J'espère avoir été assez clair ! ;)

YOYO, @+.

Commentaire de Space_Monkey le 25/02/2007 22:01:31

Très clair! Merci beaucoup pour cette aide ;-) En espérant que ca servira à d'autres.

Commentaire de deck_bsd le 06/04/2007 19:04:11

Hey yoyo,

encore une cole :D

URL :
http://www.youtube.com/get_video?video_id=d-MYVv4tgQc&l=209&t=OEgsToPDskI4J_skDyN14ufOe4WT1jWp&sk=MtPNsSdCFzOzkNDOHdZj4wC

Commentaire de hijakhakker le 17/12/2007 19:56:42

salut yoyo
ton programme m'est tres utile et je trouve que son importance didactitiel est enorme
je me demande pourquoi tu n'a pas inclue un mode de reception pour le Chunked Transfer-Encoding qui permettera de recevoir le fichier sans savoir la taille auparavent mais recevoir des paquet ou partie terminé par crlf?

Commentaire de yoyo269 le 17/12/2007 20:47:32

Merci hijakhakker.
En fait avec ce mode (que je ne connais pas :p) on doit pas pouvoir utiliser une barre de progression.
Mais c'est une idée.

YOYO, @+.

Commentaire de shuttleur le 28/12/2007 11:11:36

Bonjour YOYO269

Je m'intéresse beaucoup à ton projet, surtout pour apprendre la création de fenêtres sous Windows, il reste un truc que j'ai pas compris (oui bon enfin disons un :) ) :

- où est définie la classe PROGRESS_CLASS pour créer ta progressbar ?

Merci d'avance

Commentaire de yoyo269 le 28/12/2007 11:22:32

Bonjour shuttleur.

Je n'en suis pas certain mais il me semble que la classe est définie dans windows.h. En fait c'est un define de windows, du win32.

YOYO, @+.

Commentaire de shuttleur le 28/12/2007 11:27:38

Il semble que non d'après les tutos que j'ai lus.

Tous parlent d'utiliser "Common control library" (comctrl32.dll) et de modifier le fichier de ressources, mais je ne trouve pas comment faire sans fichier de ressources.

C'est d'autant plus incompréhensible que je ne vois aucune trace de telles manip dans ton code.

Commentaire de yoyo269 le 28/12/2007 11:49:08

Regarde ici :
http://msdn2.microsoft.com/en-us/library/ms697647.aspx

Extrait :
"The window class name for a progress bar control is PROGRESS_CLASS, which is defined as "msctls_progress" in Commctrl.h."

Le site de la MSDN est particulièrement pratique pour se genre de chose. Pense à le mettre en favori ;)

YOYO, @+.

Commentaire de shuttleur le 28/12/2007 12:07:04

Merci ;)

Remplacer PROGRESS_CLASS dans les arguments de CreateWindowEx par "msctls_progress" n'a pas suffit, bizarrement, il a fallut le remplacer par "msctls_progress32"..

Je ne sais pas si ca va géner pour la suite

a+ !

Commentaire de gf18 le 23/07/2008 13:15:32

Je ne suis pas un spécialiste en API win32, mais

case SC_CLOSE:
ShowWindow(frmhWnd, SW_HIDE);
return 0;
break;
case SC_MINIMIZE:
ShowWindow(frmhWnd, SW_MINIMIZE);
return 0;
break;
case SC_MAXIMIZE:
ShowWindow(frmhWnd, SW_MAXIMIZE);
return 0;
break;
case SC_RESTORE:
ShowWindow(frmhWnd, SW_RESTORE);
return 0;


Est-ce vraiment nécessaire?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Gtk et Devc++ [ par VinceExtense ] Je cherche des infos pour dévelloper Gtk avec Devc++.J'ai chercher des infos sur le forum de codes-sources et sur internet mais je n'ai rien trouvé.De Firefox csbar v1.1 [ par nightlord666 ] Bon bah je vais reposter le sujet içi, vu que jesusonline a du m'oublier... Après quelques sujets sur le forum, je me suis rendu compte que certaines Télécharger fichier via HTTP sous linux [ par rclsilver02 ] Bonjour, je cherche depuis quelque temps comment télécharger un fichier via http sous linux. j'ai bricolé un tit truc avec socket() et cie mais c'est Téléchargement http [ par minet03 ] Coucou, voilà j'aimerai savoir si c'est possible, et comment, de télécharger un morceau de fichier par http (genre pour reprendre un t& telechargement d'un segment de fichier avec http [ par micground ] Bonjour,Nombre de "dowload manager" (gestionnaire de téléchargement) téléchargent les fichiers par partie (resume). Les logiciels Problème avec Devc++ et OpenGL et Glut [ par nisaloncaje ] Bonjour, j'ai des petits problèmes avec la librairie glut.h et j'utilise dev c++.en effet, en faisant quelques recherches sur le forum, j'ai trou compiler ffmpeg sous VC++ 2005 [ par arno03 ] salut allj'essaye de compiler la lib ffmpeg (http://ffmpeg.sourceforge.net) avec Visual C++ 2005 Express mais j'obtient tout un tas d'erreurs : http:/ Devpacks wxWidgets 2.6.3 [ par fredcl ] Bonjour à tous, Une realase candidate de wxWidgets 2.6.3 est arrivée le 13/02/2006. Je vous propose de la tester avec les devpacks pour Dev-Cpp. Atte XPcom xul [ par Bilock ] A titre indicatif. Le pont entre xul, javascript, perl, python et c++ peut être réalisé à l'aide des xpcom et de xpconnect. L'av&# télécharger une page html [ par alphaone ] Comment télécharger une page html puis en extraire que la chaine qui vas de l'octect X à Y?C'est urgent, j'ai plus qu'une heure de bate


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 1,435 sec (3)

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