Клиент FTP с использованием SSL и TLS.
Синтаксис:
import ftplib
ftps = ftplib.FTP_TLS(host='', user='', passwd='', acct='', keyfile=None,
certfile=None, context=None, timeout=None,
source_address=None, *, encoding='utf-8')
Параметры:
host=''
- хост FTP-сервера, user=''
- имя пользователя для доступа на FTP-сервер,passwd=''
- пароль пользователя для доступа на FTP-сервер,acct=''
- информация об аккаунте,keyfile=None
- ключ сертификата безопасности (устаревшая альтернатива context
),certfile=None
- сертификата безопасности (устаревшая альтернатива context
),context=None
- объект ssl.SSLContext
,timeout=None
- тайм-аут в секундах для попытки подключения к FTP,source_address=None
- привязывает сокет к исходному адресу,encoding='utf-8'
- кодировка FTP-сервера.
Возвращаемое значение:
Описание:
Класс
ftplib.FTP_TLS()
подключается, как обычно, к порту 21, неявно защищая управляющее соединение FTP-сервера перед аутентификацией. Для защиты подключения к данным пользователь должен явно запросить его, вызвав метод
FTP_TLS.prot_p()
.
Аргумент context
- это объект ssl.SSLContext
, который позволяет объединять параметры конфигурации SSL, сертификаты и закрытые ключи в единую (потенциально долгоживущую) структуру.
Аргументы keyfile
и certfile
- это устаревшая альтернатива context
- они могут указывать на закрытый ключ в формате PEM
и файлы цепочки сертификатов (соответственно) для соединения SSL.
Изменено в Python 3.9: если аргумент timeout=0
, то он вызовет ошибку ValueError
, чтобы предотвратить создание неблокирующего сокета. Был добавлен параметр encoding
, а значение по умолчанию было изменено с Latin-1
на UTF-8
в соответствии с RFC 2640.
Пример сеанса с использованием класса ftplib.FTP_TLS()
:
>>> from ftplib import FTP_TLS
>>> ftps = FTP_TLS('ftp.pureftpd.org')
>>> ftps.login()
# '230 Anonymous user logged in'
>>> ftps.prot_p()
# '200 Data protection level set to "private"'
>>> ftps.nlst()
# ['.', '..', '6jack', 'OpenBSD', 'blogbench', 'bsdcam', 'libpuzzle',
# 'minidentd', 'mysql-udf-global-user-variables', 'php-jenkins-hash',
# 'php-skein-hash', 'php-webdav', 'phpbench', 'pincaster', 'ping',
# 'posto', 'pub', 'public', 'qscan', 'qtc', 'sharedance', 'skycache',
# 'ucarp', 'antilink', 'clockspeed', 'djbdns-jedi', 'docs',
# 'eaccelerator-jedi', 'francotone', 'fugu', 'ignore', 'metalog',
# 'misc', 'phpaudit', 'piknik', 'public_keys', 'pure-ftpd', 'sound',
# 'tmp', 'favicon.ico']
>>> ftps.quit()
# '221-Goodbye. You uploaded 0 and downloaded 0 kbytes.\n221 Logout.'
Методы объект FTP_TLS
.
Класс
ftplib.FTP_TLS()
наследуется от
ftplib.FTP()
, следовательно наследует все методы определяемые классом
ftplib.FTP()
.
Класс ftplib.FTP_TLS()
определяет следующие дополнительные методы:
FTP_TLS.ssl_version
:
Атрибут FTP_TLS.ssl_version
устанавливает используемую версию SSL (по умолчанию ssl.PROTOCOL_SSLv23
).
FTP_TLS.auth()
:
Метод
FTP_TLS.auth()
настраивает безопасное управляющее соединение с помощью TLS или SSL, в зависимости от того, что указано в атрибуте
FTP_TLS.ssl_version
.
FTP_TLS.ccc()
:
Метод FTP_TLS.ccc()
возвращает канал управления обратно в открытый текст.
Такое поведение может быть полезно, чтобы воспользоваться преимуществами брандмауэров, которые знают, как обрабатывать NAT с незащищенным FTP без открытия фиксированных портов.
FTP_TLS.prot_p()
:
Метод FTP_TLS.prot_p()
настраивает безопасное соединение для передачи данных.
FTP_TLS.prot_c()
:
Метод FTP_TLS.prot_c()
настраивает подключение для передачи данных в виде открытого текста.