码迷,mamicode.com
首页 > 编程语言 > 详细

重载Python FTP_TLS 实现Implicit FTP Over TLS方式下载文件

时间:2015-09-11 16:01:50      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

对于Python2.7来说,内置的FTP_TLS类并不支持Implicit FTP Over TLS加密方式的FTP Server操作,为支持Implicit FTP Over TLS加密方式,必须重载内置的FTP_TLS类,具体代码如下:

import ftplib

class FTP_TLS(ftplib.FTP_TLS):
    def __init__(self, host=‘‘, user=‘‘, passwd=‘‘, acct=‘‘, keyfile=None, certfile=None, timeout=180):
        ftplib.FTP_TLS.__init__(self, host, user, passwd, acct, keyfile, certfile, timeout)
    def connect(self, host=‘‘, port=0, timeout=-999):
        if host != ‘‘:
            self.host = host
        if port > 0:
            self.port = port
        if timeout != -999:
            self.timeout = timeout

        try:
            self.sock = socket.create_connection((self.host, self.port), self.timeout)
            self.af = self.sock.family
            self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile, ssl_version=ssl.PROTOCOL_TLSv1)
            self.file = self.sock.makefile(rb)
            self.welcome = self.getresp()
        except Exception as e:
            print e
        return self.welcome
    def download(self, remote_file_name, local_file_name):
        with open(local_file_name, wb) as fp:
            self.retrbinary(RETR %s % remote_file_name, fp.write)

下载的示例代码如下所示:

    host = XXX
    port = 2222
    user = user
    password = pass
    local_dir = ./data

    ftp = FTP_TLS()
    ftp.connect(host, port)
    LOG.debug(begin to login)
    ftp.login(user, password)
    LOG.debug(login succeed)
    LOG.debug(welcome info = %s, ftp.getwelcome())
    ftp.prot_p()

    ftp.cwd(/crexbatch)
    ftp.download(People.zip, People.zip)
    ftp.retrlines(LIST)
    fnames = ftp.nlst()
    open(crexbatch.txt, wb).write(\r\n.join(fnames))

 

重载Python FTP_TLS 实现Implicit FTP Over TLS方式下载文件

标签:

原文地址:http://www.cnblogs.com/Jerryshome/p/4801066.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!