ftplib
— Клиент протокола FTP¶
Данный модуль определяет класс FTP
и несколько связанных элементов.
Класс FTP
реализует клиентскую часть протокола FTP. Вы можете
использовать его для написания Python программ, которые выполняют различные
автоматизированные FTP задания, такие как зеркалирование других FTP-серверов.
Он также используется модулем urllib.request
для обработки URL-адресов,
использующих FTP. Дополнительные сведения о FTP (протоколе передачи файлов) см.
в Интернете RFC 959.
Пример сеанса с использованием модуля ftplib
:
>>> from ftplib import FTP
>>> ftp = FTP('ftp.debian.org') # подключиться к хосту, порт по умолчанию
>>> ftp.login() # пользователь anonymous, пароль anonymous@
'230 Login successful.'
>>> ftp.cwd('debian') # перейти в каталог "debian"
>>> ftp.retrlines('LIST') # список содержимого каталога
-rw-rw-r-- 1 1176 1176 1063 Jun 15 10:18 README
...
drwxr-sr-x 5 1176 1176 4096 Dec 19 2000 pool
drwxr-sr-x 4 1176 1176 4096 Nov 17 2008 project
drwxr-xr-x 3 1176 1176 4096 Oct 10 2012 tools
'226 Directory send OK.'
>>> with open('README', 'wb') as fp:
>>> ftp.retrbinary('RETR README', fp.write)
'226 Transfer complete.'
>>> ftp.quit()
Модуль определяет следующие элементы:
-
class
ftplib.
FTP
(host='', user='', passwd='', acct='', timeout=None, source_address=None)¶ Возвращает новый экземпляр класса
FTP
. Когда задан host, выполняется вызов методаconnect(host)
. Когда задан user, дополнительно выполняется вызов методаlogin(user, passwd, acct)
(где passwd и acct по умолчанию являются пустой строкой, если они не заданы). Необязательный параметр timeout указывает тайм-аут в секундах для блокировки операций, таких как попытка подключения (если он не указан, будет использоваться глобальная настройка тайм-аута по умолчанию). source_address — это 2-кортеж(host, port)
, к которому сокет привязывается в качестве исходного адреса перед подключением.Класс
FTP
поддерживает операторwith
, например.:>>> from ftplib import FTP >>> with FTP("ftp1.at.proftpd.org") as ftp: ... ftp.login() ... ftp.dir() ... # doctest: +SKIP '230 Anonymous login ok, restrictions apply.' dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 . dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 .. dr-xr-xr-x 5 ftp ftp 4096 May 6 10:43 CentOS dr-xr-xr-x 3 ftp ftp 18 Jul 10 2008 Fedora >>>
Изменено в версии 3.2: Добавлена поддержка оператора
with
.Изменено в версии 3.3: Добавлен параметр source_address.
-
class
ftplib.
FTP_TLS
(host='', user='', passwd='', acct='', keyfile=None, certfile=None, context=None, timeout=None, source_address=None)¶ Подкласс
FTP
, добавляющий поддержку TLS для FTP, как приведено в RFC 4217. Подключение происходит по порту 21, неявно защищая управляющее FTP соединение перед аутентификацией. Для защиты подключения к данным пользователь должен явно запросить его, вызвав методprot_p()
. context — это объектssl.SSLContext
, который позволяет объединять параметры конфигурации SSL, сертификаты и закрытые ключи в единую (потенциально долгоживущую) структуру. Ознакомьтесь с рекомендациями Соображения безопасности.keyfile и certfile являются устаревшей альтернативой context — они могут указывать на закрытый ключ в формате PEM и файлы цепочки сертификатов (соответственно) для соединения SSL.
Добавлено в версии 3.2.
Изменено в версии 3.3: Добавлен параметр source_address.
Изменено в версии 3.4: Класс теперь поддерживает проверку имени хоста с помощью
ssl.SSLContext.check_hostname
и Индикация имени сервера (см.ssl.HAS_SNI
).Не рекомендуется, начиная с версии 3.6: keyfile и certfile устарели в пользу context. Вместо них используйте
ssl.SSLContext.load_cert_chain()
или позвольтеssl.create_default_context()
выбрать для вас доверенные сертификаты CA системы.Вот пример сеанса с использованием класса
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', 'antilink', 'blogbench', 'bsdcam', 'clockspeed', 'djbdns-jedi', 'docs', 'eaccelerator-jedi', 'favicon.ico', 'francotone', 'fugu', 'ignore', 'libpuzzle', 'metalog', 'minidentd', 'misc', 'mysql-udf-global-user-variables', 'php-jenkins-hash', 'php-skein-hash', 'php-webdav', 'phpaudit', 'phpbench', 'pincaster', 'ping', 'posto', 'pub', 'public', 'public_keys', 'pure-ftpd', 'qscan', 'qtc', 'sharedance', 'skycache', 'sound', 'tmp', 'ucarp']
-
exception
ftplib.
error_reply
¶ Исключение возникает при получении неожиданного ответа от сервера.
-
exception
ftplib.
error_temp
¶ Исключение возникает при получении кода ошибки, указывающего на временную ошибку (коды ответа в диапазоне 400–499).
-
exception
ftplib.
error_perm
¶ Исключение возникает при получении кода ошибки, указывающего на постоянную ошибку (коды ответа в диапазоне 500–599).
-
exception
ftplib.
error_proto
¶ Исключение возникает, когда от сервера получен ответ, который не соответствует спецификациям ответа протокола передачи файлов, т. е. начинается с цифры в диапазоне 1–5.
-
ftplib.
all_errors
¶ Множество всех исключений (в виде кортежа), которые методы экземпляров
FTP
могут вызвать в результате проблем с FTP-соединением (в отличие от программных ошибок, допущенных вызывающей стороной). Данный множество включает четыре исключения, перечисленные выше, а такжеOSError
иEOFError
.
См.также
- Модуль
netrc
- Парсер для формата файла
.netrc
. Файл.netrc
есть обычно используется FTP-клиентами для загрузки информации аутентификации пользователя перед запросом пользователя.
FTP-объекты¶
Несколько методов доступны в двух вариантах: один для обработки текстовых
файлов и другой для двоичных файлов. Они названы в честь используемой команды,
за которой следует lines
для текстовой версии или binary
для двоичной
версии.
У экземпляров FTP
следующие методы:
-
FTP.
set_debuglevel
(level)¶ Устанавливает уровень отладки экземпляра. Это контролирует количество напечатанного отладочного вывода. Значение по умолчанию
0
не выводит отладочный вывод. Значение1
даёт умеренный объем отладочной информации, как правило, одну строку на запрос. Значение2
или выше создаёт максимальный объем отладочной информации, регистрируя каждую строку, отправленную и полученную по управляющему соединению.
-
FTP.
connect
(host='', port=0, timeout=None, source_address=None)¶ Подключиться к заданному хосту и порту. Номер порта по умолчанию —
21
, как указано в спецификации протокола FTP. Редко требуется указывать другой номер порта. Эту функцию следует вызывать только один раз для каждого экземпляра; его вообще не следует вызывать, если хост был задан при создании экземпляра. Все остальные методы можно использовать только после установления соединения. Необязательный параметр timeout указывает время ожидания в секундах для попытки подключения. Если timeout не передан, будет использоваться глобальная настройка времени ожидания по умолчанию. source_address — это 2-кортеж(host, port)
, к которому сокет привязывается в качестве исходного адреса перед подключением.Вызывает событие аудита
ftplib.connect
с аргументамиself
,host
,port
.Изменено в версии 3.3: Добавлен параметр source_address.
-
FTP.
getwelcome
()¶ Возвращает приветственное сообщение, отправленное сервером в ответ на начальное соединение. (Это сообщение иногда содержит заявление об отказе от ответственности или справочную информацию, которая может иметь отношение к пользователю.)
-
FTP.
login
(user='anonymous', passwd='', acct='')¶ Войти в систему как данный user. Параметры passwd и acct являются необязательными и по умолчанию содержат пустую строку. Если user не указан, по умолчанию используется
'anonymous'
. Если user —'anonymous'
, passwd по умолчанию —'anonymous@'
. Эту функцию следует вызывать только один раз для каждого экземпляра после установления соединения; его вообще не следует вызывать, если хост и пользователь были заданы при создании экземпляра. Большинство команд FTP разрешены только после входа клиента в систему. Параметр acct предоставляет «учетную информацию»; несколько систем реализуют это.
-
FTP.
abort
()¶ Прервать текущую передачу файла. Использование этого не всегда работает, но попробовать стоит.
-
FTP.
sendcmd
(cmd)¶ Отправить простую командную строку на сервер и возвращает строку ответа.
Вызывает событие аудита
ftplib.sendcmd
с аргументамиself
,cmd
.
-
FTP.
voidcmd
(cmd)¶ Отправить простую командную строку на сервер и обработать ответ. Ничего не возвращать, если получен код ответа, соответствующий успеху (коды в диапазоне 200–299). В противном случае вызывается
error_reply
.Вызывает событие аудита
ftplib.sendcmd
с аргументамиself
,cmd
.
-
FTP.
retrbinary
(cmd, callback, blocksize=8192, rest=None)¶ Получить файл в двоичном режиме передачи. cmd должен быть соответствующей командой
RETR
:'RETR filename'
. Функция callback вызывается для каждого полученного блока данных с одним байтовым аргументом, задающим блок данных. Необязательный аргумент blocksize указывает максимальный размер фрагмента для чтения в объекте низкоуровневого сокета, созданном для фактической передачи (который также будет наибольшим размером блоков данных, переданных в callback). Выбирается разумное значение по умолчанию. rest означает то же самое, что и в методеtransfercmd()
.
-
FTP.
retrlines
(cmd, callback=None)¶ Получить список файлов или каталогов в режиме передачи ASCII. cmd должна быть соответствующей командой
RETR
(см.retrbinary()
) или такой командой, какLIST
илиNLST
(обычно это просто строка'LIST'
).LIST
извлекает список файлов и информацию об данных файлах.NLST
извлекает список имён файлов. Функция callback вызывается для каждой строки со строковым аргументом, содержащим строку с удаленным конечным CRLF. По умолчанию callback печатает строку вsys.stdout
.
-
FTP.
set_pasv
(val)¶ Включает «пассивный» режим, если val истинно, в противном случае отключает пассивный режим. Пассивный режим включён по умолчанию.
-
FTP.
storbinary
(cmd, fp, blocksize=8192, callback=None, rest=None)¶ Сохранить файл в двоичном режиме передачи. cmd должна быть соответствующей командой
STOR
:"STOR filename"
. fp — это файловый объект (открытый в двоичном режиме), который считывается до завершения EOF с использованием методаread()
в блоках размером blocksize для предоставления данных для сохранения. Аргумент blocksize по умолчанию равен 8192. callback — это необязательный единственный вызываемый параметр, который вызывается для каждого блока данных после его отправки. rest означает то же самое, что и в методеtransfercmd()
.Изменено в версии 3.2: Добавлен параметр rest.
-
FTP.
storlines
(cmd, fp, callback=None)¶ Сохранить файл в режиме передачи ASCII. cmd должна быть соответствующей командой
STOR
(см.storbinary()
). Строки считываются до EOF из файлового объекта fp (открытого в двоичном режиме) с использованием его методаreadline()
для предоставления данных для сохранения. callback — это необязательный одиночный вызываемый параметр, который вызывается в каждой строке после её отправки.
-
FTP.
transfercmd
(cmd, rest=None)¶ Инициализация передачи через соединение для передачи данных. Если передача активна, отправить команду
EPRT
илиPORT
и команду передачи, указанную в cmd, и принять соединение. Если сервер пассивен, отправить командуEPSV
илиPASV
, подключившись к нему и запустить команду передачи. В любом случае возвращает сокет для соединения.Если указан необязательный rest, на сервер отправляется команда
REST
с передачей rest в качестве аргумента. rest обычно представляет собой смещение в байтах в запрошенном файле, указывающее серверу перезапустить отправку байтов файла с запрошенным смещением, пропуская начальные байты. Однако обратите внимание, что RFC 959 требует только, чтобы rest была строкой, содержащей символы в печатном диапазоне от кода ASCII 33 до кода ASCII 126. Таким образом, методtransfercmd()
преобразует rest в строку, но проверка содержимого строки не выполняется. Если сервер не распознает командуREST
, будет возбуждено исключениеerror_reply
. Если это произойдет, просто вызовитеtransfercmd()
без аргумента rest.
-
FTP.
ntransfercmd
(cmd, rest=None)¶ Аналогичен
transfercmd()
, но возвращает кортеж подключения к данным и ожидаемый размер данных. Если ожидаемый размер не может быть вычислен,None
будет возвращён как ожидаемый размер. cmd и rest означают то же самое, что иtransfercmd()
.
-
FTP.
mlsd
(path="", facts=[])¶ Список каталогов в стандартном формате с помощью команды
MLSD
(RFC 3659). Если path пропущен, предполагается текущий каталог. facts — это список строк, представляющих тип требуемой информации (например,["type", "size", "perm"]
). Возвращает объект-генератор, дающего кортеж из двух элементов для каждого файла, найденного в пути. Первый элемент — это имя файла, второй — словарь, содержащий факты об имени файла. Содержимое этого словаря может быть ограничено аргументом facts, но сервер не гарантирует возвращение всех запрошенных фактов.Добавлено в версии 3.3.
-
FTP.
nlst
(argument[, ...])¶ Возвращает список имён файлов, возвращаемый командой
NLST
. Необязательный argument — это каталог для списка (по умолчанию это текущий каталог сервера). Для передачи нестандартных параметров командеNLST
можно использовать несколько аргументов.Примечание
Если ваш сервер поддерживает эту команду,
mlsd()
предлагает лучший API.
-
FTP.
dir
(argument[, ...])¶ Создаёт список каталогов, возвращённый командой
LIST
, и распечатывает его в стандартный вывод. Необязательный argument — это каталог для списка (по умолчанию это текущий каталог сервера). Для передачи нестандартных параметров командеLIST
можно использовать несколько аргументов. Если последний аргумент является функцией, он используется как функция callback, как и дляretrlines()
; по умолчанию печатаетсяsys.stdout
. Данный метод возвращаетNone
.Примечание
Если ваш сервер поддерживает эту команду,
mlsd()
предлагает лучший API.
-
FTP.
rename
(fromname, toname)¶ Переименовывает файл fromname на сервере в toname.
-
FTP.
delete
(filename)¶ Удаляет файл с именем filename с сервера. В случае успеха возвращает текст ответа, в противном случае вызывает
error_perm
при ошибках прав доступа илиerror_reply
при других ошибках.
-
FTP.
cwd
(pathname)¶ Устанавливает текущий каталог на сервере.
-
FTP.
mkd
(pathname)¶ Создаёт новый каталог на сервере.
-
FTP.
pwd
()¶ Возвращает путь к текущему каталогу на сервере.
-
FTP.
rmd
(dirname)¶ Удаляет каталог с именем dirname на сервере.
-
FTP.
size
(filename)¶ Запрашивает размер файла с именем filename на сервере. В случае успеха размер файла возвращается как целое число, в противном случае возвращается
None
. Обратите внимание, что командаSIZE
не стандартизирована, но поддерживается многими распространенными реализациями серверов.
-
FTP.
quit
()¶ Отправляет на сервер команду
QUIT
и закрыть соединение. Это «вежливый» способ закрыть соединение, но он может вызвать исключение, если сервер ответит ошибкой на командуQUIT
. Это подразумевает вызов методаclose()
, который делает экземплярFTP
бесполезным для последующих вызовов (см. ниже).
-
FTP.
close
()¶ Закрывает соединение в одностороннем порядке. Не следует применять к уже закрытому соединению, например, после успешного вызова
quit()
. После этого вызова экземплярFTP
больше не должен использоваться (после вызоваclose()
илиquit()
вы не можете повторно открыть соединение, выполнив другой методlogin()
).
Объекты FTP_TLS¶
Класс FTP_TLS
наследуется от FTP
, определяя данные
дополнительные объекты:
-
FTP_TLS.
ssl_version
¶ Используемая версия SSL (по умолчанию
ssl.PROTOCOL_SSLv23
).
-
FTP_TLS.
auth
()¶ Настраивает безопасное управляющее соединение с помощью TLS или SSL, в зависимости от того, что указано в атрибуте
ssl_version
.Изменено в версии 3.4: Теперь данный метод поддерживает проверку имени хоста с помощью
ssl.SSLContext.check_hostname
и Индикация имени сервера (см.ssl.HAS_SNI
).
-
FTP_TLS.
ccc
()¶ Возвращает канал управления обратно в открытый текст. Может быть полезно, чтобы воспользоваться преимуществами брандмауэров, которые знают, как обрабатывать NAT с незащищенным FTP, не открывая фиксированные порты.
Добавлено в версии 3.3.
-
FTP_TLS.
prot_p
()¶ Настраивает безопасное соединение для передачи данных.
-
FTP_TLS.
prot_c
()¶ Настраивает соединение для передачи данных в виде открытого текста.