Python FTP_をリロードTLS実装Implicit FTP Over TLS方式ダウンロードファイル
6125 ワード
Python 2について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
'.join(fnames))