2010-10-11 25 views
1

J'essaie d'utiliser ftps pour télécharger le fichier sur notre serveur FTP. Connexion est trivial et fonctionne:Comment télécharger un fichier sur le serveur FTPS en utilisant m2crypto

from M2Crypto import ftpslib 
ftp = ftpslib.FTP_TLS() 
ftp.connect(host) 
ftp.login(username, password) 

ainsi que descendant dans le répertoire

for dir in directory: 
    ftp.cwd(dir) 

Cependant, lorsque vous essayez de récupérer le contenu du répertoire:

if directory_name not in ftp.nlst(): 
    ftp.mkd(directory_name) 

Je reçois 522 erreur:

File "/usr/lib/python2.5/ftplib.py", line 459, in nlst 
    self.retrlines(cmd, files.append) 
File "/usr/lib/python2.5/ftplib.py", line 407, in retrlines 
    conn = self.transfercmd(cmd) 
File "/usr/lib/python2.5/ftplib.py", line 356, in transfercmd 
    return self.ntransfercmd(cmd, rest)[0] 
File "/var/lib/python-support/python2.5/M2Crypto/ftpslib.py", line 86, in ntransfercmd 
    conn, size = FTP.ntransfercmd(self, cmd, rest) 
File "/usr/lib/python2.5/ftplib.py", line 327, in ntransfercmd 
    resp = self.sendcmd(cmd) 
File "/usr/lib/python2.5/ftplib.py", line 241, in sendcmd 
    return self.getresp() 
File "/usr/lib/python2.5/ftplib.py", line 216, in getresp 
    raise error_perm, resp 
ftplib.error_perm: 522 Data connections must be encrypted. 

Il semble TL S est utilisé uniquement pour la négociation, pas pour les transferts.

Y at-il un moyen de sécuriser le transfert (je voudrais télécharger des fichiers en utilisant storbinary()) en utilisant M2Crypto? Sinon, quelles sont les autres alternatives?

Répondre

3

La solution est d'appeler explicitement pour le transfert protégé après login():

ftp.prot_p()