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

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

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.