Téléchargement d un fichier avec ou non un login/Mot de passe et avec ou non le protocole ssl. Tout ca avec une petite barre de progression tres simple.
- Tous les details dans le zip
#!/usr/bin/env python
# -*- coding:Utf-8 -*-
import urllib2, base64, socket, os, sys
#***************************************
#*** variable de depart
#***************************************
Utilisateur = "Utilisateur"
MotDePasse = "Mot-De-Passe"
UrlFichier = "https://192.168.200.5/sauveparam/fb02e4f4fb8caa233e69d1f10d06575d/blabla.txt"
LocalFichier = "blabla.txt"
MessageErreur = "Tout va bien madame la marquise !"
#***************************************
#*** Preparation du telechargement !
#***************************************
socket.setdefaulttimeout(5)
RequetteFichier = urllib2.Request(UrlFichier)
MotDePasseCode = base64.encodestring('%s:%s' % (Utilisateur, MotDePasse))[:-1]
RequetteFichier.add_header("Authorization", "Basic %s" % MotDePasseCode)
#***************************************
#*** Test du lien
#***************************************
TelechargementFichier = False
try:
UrlOk = urllib2.urlopen(RequetteFichier)
TelechargementFichier = True
except urllib2.HTTPError, MesErr:
if MesErr.code == 404:
MessageErreur = "Fichier non trouvé : Erreur 404 !"
else:
MessageErreur = "La requete HTTP(S) a echoue avec le code %d (%s)" % (MesErr.code, MesErr.msg)
except urllib2.URLError, MesErr:
MessageErreur = "Echec. Cause:", MesErr.reason
#***************************************
#*** Telechargement du lien !
#***************************************
if TelechargementFichier == True:
try :
TmpFichier = open("tmp_" + LocalFichier , "wb")
TailleFichier = int(UrlOk.headers.get('content-length'))
print "Telechargement du fichier : ", TailleFichier
print "0-------20--------40--------60--------80-------100"
I = 0
F = 0
Tampon = ''
#***************************************
#*** Boucle du Telechargement !
#***************************************
while True:
Tampon = UrlOk.read(4096)
I = I + 1
if not Tampon: break
TmpFichier.write(Tampon)
Tampon = None
#***************************************
#*** Affichage de la barre de progression
#***************************************
if (((I*4096*100) / TailleFichier) % 2) == 0:
if F <> ((I*4096*100) / TailleFichier):
F = ((I*4096*100) / TailleFichier)
sys.stdout.write('.')
sys.stdout.flush()
print " "
#***************************************
#*** Cloture du telechargement
#***************************************
TmpFichier.flush()
TmpFichier.close()
if os.path.isfile(LocalFichier):
os.remove(LocalFichier)
os.rename("tmp_" + LocalFichier, LocalFichier)
MessageErreur = "Telechargement terminé !"
#***************************************
#*** Erreur du telechargement
#***************************************
except:
TmpFichier.close()
os.remove("tmp_" + LocalFichier)
TelechargementFichier = False
MessageErreur = "ERREUR Telechargement"
#***************************************
#*** fini !
#***************************************
print MessageErreur