Télécharger un fichier à partir d'un alias !

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 921 fois - Téléchargée 27 fois

Contenu du snippet

Update du 12/12/03 ( à 20h30) :
- Les pourcentages sont disponibles

Voici un alias assez simple, basé sur les sockets, permettant de télécharger un fichier sur un serveur http.
Ce n'est pas spécialement dur pour quelqu'un qui maitrise les sockets, mais sera certainement utile aux autres.
J'ai essayé de commenter au mieux ma source, pour que meme les débutants puissent la comprendre sans trop de mal.

Source / Exemple :


;#############################################################
;## Downloader de fichiers sur serveur HTTP
;## By Sorn_Drixer
;## Date : 12/12/03
;## http://www.Bot-Corporation.fr.tc
;##
;## Utilisation : /downloadfile lien
;## Exemple : /downloadfile http://blabla.com/bla.zip
;## ( lien inexistant, servant uniquement à titre d'exemple )
;#############################################################

alias downloadfile {
  if (!$1-) halt
  ;on vérifie si un nom identitique au fichier que vous aller télécharger n'est pas déjà présent sur votre PC
  ;si il est présent, cela affiche le message d'erreur et arrete le script
  if ($exists($nopath($1-)) == $true) { echo -a [ Erreur [ : Fichier déjà existant sur votre PC | halt }
  ;on enregistre le lien dans une variable
  set %dl.lien $1-
  echo -a [ Start ] : Download démarré
  ;on lance une connexion sur le serveur port 80 (http) où vous voulez downloader votre fichier
  sockopen dlfile $gettok($1-,2,47) 80
  ;ouvre une fenetre window dans laquelle nous allons afficher les pourcentages de dl plus tard
  window @Pourcentage
}

on *:SOCKOPEN:dlfile:{
  ;on envoie la requete au serveur où l'on va downloader le fichier
  sockwrite -n $sockname GET %dl.lien HTTP/1.0
  ;retour de chariot selon la méthode du protocole HTTP ( RFC 1945 )
  sockwrite -n $sockname $CRLF
}

on *:SOCKREAD:dlfile:{
  :regetheader
  sockread %headers
  ;on cherche dans les headers la taille du fichier ( en octets ) qui va etre downloadé
  if ($gettok(%headers,1,32) == Content-Length:) { set %size.file $gettok(%headers,2-,32) | unset %headers | sockrename $sockname dlfile2 }
}

on *:SOCKREAD:dlfile2:{
  :nextread
  ;recoit les données dans une variable binaire
  sockread &recu
  ;On affiche les pourcentages dans la fenetre window
  if ($calc(%size.file - $file($nopath(%dl.lien)).size) != 0) { aline @pourcentage Téléchargement de $nopath(%dl.lien) : $round($calc($file($nopath(%dl.lien)).size / %size.file * 100),0) $+ $chr(37) }
  ;écris les données reçu dans un fichier binaire
  bwrite $nopath(%dl.lien) -1 -1 &recu
  if ($sockbr > 0) { goto nextread }
}

on *:SOCKCLOSE:dlfile2:{
  ;on vérifie si la taille du fichier downloadé sur le pc n'est pas inférieur que celui présent sur le serveur où vous l'avez downloadé
  ;Si le fichier présent sur votre PC est inférieur à celui du serveur, cela signifie qu'il est corromput, qu'il manque des données
  ;et ne peut donc etre utilisable
  if ($file($nopath(%dl.lien)).size < %size.file) { echo -a [ Erreur [ : $nopath(%dl.lien) est corrompu ! | halt }
  ;download terminé avec succès on affiche les résultats
  echo -a [ End ] : Download terminé > $nopath(%dl.lien) : %size.file octets
  ;on efface les variables utilisées dans le script après utilisation
  unset %size.file | unset %dl.lien | unset %headers
}

Conclusion :


Copiez/Collez ce code dans vos remotes mIRC (ALT + R).

Utilisation :
/downloadfile http://site/fichier

Exemple :
/downloadfile http://www.sitenimp.com/fichiernimp.zip
( lien inexistant, servant uniquement à titre d'exemple )

Dès que le download est terminé, vous en serez averti par un echo, et le fichier downloadé sera présent dans le répertoire principal de votre mIRC.

Mon alias ne possède aucune option qu'un downloader habituel ( tel flashget ) vous donne, mais cette alias vous est donné uniquement pour que vous puissiez comprendre comment on télécharge un fichier à partir d'un socket, pour ainsi par la suite, en faire une source plus complète, voir plus tard, un future Flashget en mIRC Scripting, qui sait ? ;)

A voir également

Ajouter un commentaire Commentaires
Messages postés
2106
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
15 novembre 2020
2
Bizarrement, je dois être le seul chez qui ça ne marche pas.

Ca m'indique bien "Download démarré" mais rien ne s'affiche dans la fenêtre @Pourcentage, plus rien. Le fichier n'est pas téléchargé qui plus est.

Une piste à suivre ?

PS : Je suis sous mIRC 6.3 et j'ai remarqué que certains scripts étaient plus capricieux avec cette version. A creuser ...
Messages postés
2087
Date d'inscription
jeudi 12 décembre 2002
Statut
Modérateur
Dernière intervention
30 janvier 2011
8
carpediem666fr :
A la base, je rappelais le goto regetheader pour relire chaque ligne de donnée recu, mais j'ai constaté que cela n'était pas nécéssaire, alors j'ai supprimé mon goto regetheader, mais j'ai par contre oublié de supprimer :regetheader.

Pour ton problème, avec free j'ai également defois du mal à m'y connecter par socket.
Soit tu sockopen directement vers tonlogin.free.fr, soit tu sockopen vers www.free.fr puis tu envoies la requete GET vers ton site.
Messages postés
122
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
2 novembre 2008

Comme je suis dégouté ! je croyais avoir ma solution... mais télécharger depuis www.onlyu.fr.st le fichier versao.txt me mets: sockopen non connectée :-((( -
bon, je sais pas trop ce k avais le p%?§@^\ de serveur de Free mais la ca bon.. ou presk :

Téléchargement de versao.txt : 0%
Téléchargement de versao.txt : 688%
Messages postés
122
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
2 novembre 2008

Comme je suis dégouté ! je croyais avoir ma solution... mais télécharger depuis www.onlyu.fr.st le fichier versao.txt me mets: sockopen non connectée :-(((
Messages postés
122
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
2 novembre 2008

Je salue (pour la première fois par écrit, mais combien de fois de tête) la générosité de Sorn...
dis moi, ds ton code, tu mets :regetheader.. ya pas de goto regetheader .... ???

Pis comme Klibot, si y moyen d'optimiser... Au fait, grace à toi, kolibot, mon script est de plus en plus (trop en trop) sophistiqué (rapport à ta remarque sur dialog studio à utiliser). MErci bcp à toi, et Merci à Sorn qui va me faire éviter d'utiliser une dll pr dl un fichier :-)

donc, 9,5/10 en attendant l'explication sur mon commentaire :-)
Afficher les 17 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.