Содержание страницы
20.8. ftplib – клиент протокола FTP¶ftplib – FTP protocol client
Исходный код: Lib/ftplib.py
Этот модуль определяет класс FTP и несколько связанных с ним элементов.
Класс FTP реализует клиентскую сторону протокола FTP. Его можно использовать для написания программ на Python, выполняющих различные автоматизированные задачи FTP, такие как зеркалирование других FTP-серверов. Он также используется модулем urllib для обработки URL-адресов, использующих FTP. Дополнительную информацию о FTP (протокол передачи файлов) см. в Internet 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.'
>>> ftp.retrbinary('RETR README', open('README', 'wb').write)
'226 Transfer complete.'
>>> ftp.quit()
Модуль определяет следующие элементы:
-
class
ftplib.FTP([host[, user[, passwd[, acct[, timeout]]]]])¶ Возвращает новый экземпляр класса
FTP. Когда указан host, выполняется вызов методаconnect(host). Когда указан user, дополнительно выполняется вызов методаlogin(user, passwd, acct)(где passwd и acct по умолчанию равны пустой строке, если не заданы). Необязательный параметр timeout задаёт тайм-аут в секундах для блокирующих операций, таких как попытка подключения (если он не указан, используется глобальная настройка тайм-аута по умолчанию).Изменено в версии 2.6: добавлен параметр timeout.
-
class
ftplib.FTP_TLS([host[, user[, passwd[, acct[, keyfile[, certfile[, context[, timeout]]]]]]]])¶ Подкласс
FTP, добавляющий поддержку TLS для FTP, как описано в RFC 4217. Подключение выполняется как обычно к порту 21, неявно защищая управляющее соединение FTP перед аутентификацией. Для защиты соединения данных требуется явный вызов методаprot_p(). context – это объектssl.SSLContext, который позволяет объединить параметры конфигурации SSL, сертификаты и закрытые ключи в одну (потенциально долгоживущую) структуру. Ознакомьтесь с рекомендациями по безопасности для получения лучших практик.keyfile и certfile – это устаревшая альтернатива context – они могут указывать на PEM-форматированные файлы закрытого ключа и цепочки сертификатов (соответственно) для SSL-соединения.
Новое в версии 2.7.
Изменено в версии 2.7.10: добавлен параметр context.
Вот пример сеанса с использованием класса
FTP_TLS:>>> from ftplib import FTP_TLS >>> ftps = FTP_TLS('ftp.python.org') >>> ftps.login() # анонимный вход до защиты управляющего канала >>> ftps.prot_p() # переключиться на защищённое соединение данных >>> ftps.retrlines('LIST') # безопасно вывести содержимое каталога total 9 drwxr-xr-x 8 root wheel 1024 Jan 3 1994 . drwxr-xr-x 8 root wheel 1024 Jan 3 1994 .. drwxr-xr-x 2 root wheel 1024 Jan 3 1994 bin drwxr-xr-x 2 root wheel 1024 Jan 3 1994 etc d-wxrwxr-x 2 ftp wheel 1024 Sep 5 13:43 incoming drwxr-xr-x 2 root wheel 1024 Nov 17 1993 lib drwxr-xr-x 6 1094 wheel 1024 Sep 13 19:07 pub drwxr-xr-x 3 root wheel 1024 Jan 3 1994 usr -rw-r--r-- 1 root root 312 Aug 1 1994 welcome.msg '226 Transfer complete.' >>> ftps.quit() >>>
-
exception
ftplib.error_reply¶ Исключение, возникающее при получении неожиданного ответа от сервера.
-
exception
ftplib.error_temp¶ Исключение, возникающее при получении кода ошибки, указывающего на временную ошибку (коды ответов в диапазоне 400–499).
-
exception
ftplib.error_perm¶ Исключение, возникающее при получении кода ошибки, указывающего на постоянную ошибку (коды ответов в диапазоне 500–599).
-
exception
ftplib.error_proto¶ Исключение, возникающее при получении ответа от сервера, который не соответствует спецификациям ответов протокола передачи файлов (File Transfer Protocol), то есть начинается с цифры в диапазоне 1–5.
-
ftplib.all_errors¶ Набор всех исключений (в виде кортежа), которые могут возбуждать методы экземпляров
FTPв результате проблем с FTP-соединением (в отличие от ошибок программирования, допущенных вызывающим кодом). Этот набор включает четыре перечисленных выше исключения, а такжеsocket.errorиIOError.
См. также
- Модуль
netrc Синтаксический анализатор для формата файлов
.netrc. Файл.netrcобычно используется FTP-клиентами для загрузки информации аутентификации пользователя перед запросом к пользователю.
Файл Tools/scripts/ftpmirror.py в дистрибутиве исходного кода Python – это сценарий, который может зеркалировать FTP-сайты (или их части) с помощью модуля ftplib. Его можно использовать как расширенный пример применения этого модуля.
20.8.1. Объекты FTP¶FTP Objects
Несколько методов доступны в двух вариантах: один для работы с текстовыми файлами, другой – для двоичных. Они названы по команде, за которой следует lines для текстовой версии или binary для двоичной.
Экземпляры FTP имеют следующие методы:
-
FTP.set_debuglevel(level)¶ Устанавливает уровень отладки экземпляра. Это контролирует объём выводимой отладочной информации. Значение по умолчанию,
0, не даёт отладочного вывода. Значение1даёт умеренный объём отладочного вывода, как правило, одну строку на запрос. Значение2или выше даёт максимальный объём отладочного вывода, с записью каждой строки, отправленной и полученной по управляющему соединению.
-
FTP.connect(host[, port[, timeout]])¶ Подключается к указанному хосту и порту. Номер порта по умолчанию –
21, как указано в спецификации протокола FTP. Редко требуется указывать другой номер порта. Эту функцию следует вызывать только один раз для каждого экземпляра; её не следует вызывать вообще, если хост был указан при создании экземпляра. Все остальные методы можно использовать только после установки соединения.Необязательный параметр timeout задаёт тайм-аут в секундах для попытки подключения. Если timeout не передан, будет использована глобальная настройка тайм-аута по умолчанию.
Изменено в версии 2.6: добавлен параметр timeout.
-
FTP.getwelcome()¶ Возвращает приветственное сообщение, отправленное сервером в ответ на начальное подключение. (Это сообщение иногда содержит отказ от ответственности или справочную информацию, которая может быть полезна пользователю.)
-
FTP.login([user[, passwd[, acct]]])¶ Выполняет вход под указанным user. Параметры passwd и acct необязательны и по умолчанию равны пустой строке. Если user не указан, по умолчанию используется
'anonymous'. Если user равен'anonymous', пароль passwd по умолчанию –'anonymous@'. Эта функция должна вызываться только один раз для каждого экземпляра после установки соединения; её не следует вызывать, если хост и пользователь были указаны при создании экземпляра. Большинство команд FTP разрешены только после входа клиента. Параметр acct предоставляет «учётную информацию»; лишь немногие системы это реализуют.
-
FTP.abort()¶ Прерывает текущую передачу файла. Этот метод срабатывает не всегда, но попробовать стоит.
-
FTP.sendcmd(command)¶ Отправляет простую строку команды на сервер и возвращает строку ответа.
-
FTP.voidcmd(command)¶ Отправляет простую командную строку серверу и обрабатывает ответ. Ничего не возвращает, если получен код ответа, соответствующий успеху (коды в диапазоне 200–299). В противном случае возбуждает
error_reply.
-
FTP.retrbinary(command, callback[, maxblocksize[, rest]])¶ Получает файл в двоичном режиме передачи. command должна быть соответствующей командой
RETR:'RETR filename'. Функция колбэк вызывается для каждого полученного блока данных с одним строковым аргументом, содержащим блок данных. Необязательный аргумент maxblocksize задаёт максимальный размер фрагмента для чтения из низкоуровневого сокетного объекта, созданного для фактической передачи (это также будет максимальный размер блоков данных, передаваемых в колбэк). Выбирается разумное значение по умолчанию. rest означает то же самое, что и в методеtransfercmd().
-
FTP.retrlines(command[, callback])¶ Получает список файлов или каталогов в ASCII-режиме передачи. command должна быть подходящей командой
RETR(см.retrbinary()) или такой командой, какLIST,NLSTилиMLSD(обычно просто строка'LIST').LISTполучает список файлов и информацию о них.NLSTполучает список имён файлов. На некоторых серверахMLSDполучает машиночитаемый список файлов и информации о них. Функция колбэк вызывается для каждой строки с аргументом-строкой, содержащей строку с удалённым завершающим CRLF. По умолчанию колбэк выводит строку вsys.stdout.
-
FTP.set_pasv(val)¶ Включает «пассивный» режим, если val истинно, в противном случае отключает пассивный режим. (В Python 2.0 и более ранних версиях пассивный режим был выключен по умолчанию; в Python 2.1 и более поздних версиях он включён по умолчанию.)
-
FTP.storbinary(command, fp[, blocksize, callback, rest])¶ Сохраняет файл в двоичном режиме передачи. command должна быть соответствующей командой
STOR:"STOR filename". fp – это открытый файловый объект, который читается до EOF с помощью его методаread()блоками размера blocksize для предоставления сохраняемых данных. Значение аргумента blocksize по умолчанию равно 8192. колбэк – необязательный вызываемый объект с одним параметром, который вызывается для каждого блока данных после его отправки. rest означает то же самое, что и в методеtransfercmd().Изменено в версии 2.1: добавлено значение по умолчанию для blocksize.
Изменено в версии 2.6: добавлен параметр колбэк.
Изменено в версии 2.7: добавлен параметр rest.
-
FTP.storlines(command, fp[, callback])¶ Сохраняет файл в ASCII-режиме передачи. command должна быть подходящей командой
STOR(см.storbinary()). Строки читаются до EOF из открытого файлового объекта fp с помощью его методаreadline()для предоставления сохраняемых данных. колбэк – необязательный вызываемый объект с одним параметром, который вызывается для каждой строки после её отправки.Изменено в версии 2.6: добавлен параметр колбэк.
-
FTP.transfercmd(cmd[, rest])¶ Инициирует передачу по соединению данных. Если передача активная, отправляет команду
EPRTилиPORTи команду передачи, указанную в cmd, и принимает соединение. Если сервер пассивный, отправляет командуEPSVилиPASV, подключается к нему и запускает команду передачи. В любом случае возвращает сокет соединения.Если указан необязательный rest, на сервер отправляется команда
REST, передающая rest в качестве аргумента. Обычно rest – это смещение в байтах в запрашиваемом файле, указывающее серверу возобновить передачу байтов файла с указанного смещения, пропуская начальные байты. Однако обратите внимание, что RFC 959 требует только, чтобы rest был строкой, содержащей символы из диапазона печатных символов ASCII с кодами от 33 до 126. Поэтому методtransfercmd()преобразует rest в строку, но не выполняет проверку её содержимого. Если сервер не распознаёт командуREST, будет возбуждено исключениеerror_reply. Если это произошло, просто вызовитеtransfercmd()без аргумента rest.
-
FTP.ntransfercmd(cmd[, rest])¶ Как и
transfercmd(), но возвращает кортеж из соединения данных и ожидаемого размера данных. Если ожидаемый размер не удалось вычислить, в качестве ожидаемого размера возвращаетсяNone. cmd и rest имеют тот же смысл, что и вtransfercmd().
-
FTP.nlst(argument[, ...])¶ Возвращает список имён файлов, возвращаемый командой
NLST. Необязательный аргумент argument – это каталог для вывода списка (по умолчанию текущий каталог сервера). Можно использовать несколько аргументов для передачи нестандартных параметров командеNLST.
-
FTP.dir(argument[, ...])¶ Выводит список каталога, возвращаемый командой
LIST, печатая его в стандартный вывод. Необязательный аргумент argument – это каталог для вывода списка (по умолчанию текущий каталог сервера). Можно использовать несколько аргументов для передачи нестандартных параметров командеLIST. Если последний аргумент является функцией, он используется как функция обратного вызова колбэк, как вretrlines(); по умолчанию вывод производится вsys.stdout. Этот метод возвращаетNone.
-
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бесполезным для последующих вызовов (см. ниже).
20.8.2. Объекты FTP_TLS¶FTP_TLS Objects
FTP_TLS класс наследует от FTP, определяя эти дополнительные объекты:
-
FTP_TLS.ssl_version¶ Версия SSL для использования (по умолчанию
ssl.PROTOCOL_SSLv23).
-
FTP_TLS.auth()¶ Устанавливает безопасное управляющее соединение с помощью TLS или SSL в зависимости от того, что указано в атрибуте
ssl_version().
-
FTP_TLS.prot_p()¶ Устанавливает защищённое соединение данных.
-
FTP_TLS.prot_c()¶ Устанавливает незащищённое соединение данных.