1:mod:`ftplib` --- FTP protocol client 2===================================== 3 4.. module:: ftplib 5 :synopsis: FTP protocol client (requires sockets). 6 7**Source code:** :source:`Lib/ftplib.py` 8 9.. index:: 10 pair: FTP; protocol 11 single: FTP; ftplib (standard module) 12 13-------------- 14 15This module defines the class :class:`FTP` and a few related items. The 16:class:`FTP` class implements the client side of the FTP protocol. You can use 17this to write Python programs that perform a variety of automated FTP jobs, such 18as mirroring other FTP servers. It is also used by the module 19:mod:`urllib.request` to handle URLs that use FTP. For more information on FTP 20(File Transfer Protocol), see internet :rfc:`959`. 21 22The default encoding is UTF-8, following :rfc:`2640`. 23 24.. include:: ../includes/wasm-notavail.rst 25 26Here's a sample session using the :mod:`ftplib` module:: 27 28 >>> from ftplib import FTP 29 >>> ftp = FTP('ftp.us.debian.org') # connect to host, default port 30 >>> ftp.login() # user anonymous, passwd anonymous@ 31 '230 Login successful.' 32 >>> ftp.cwd('debian') # change into "debian" directory 33 '250 Directory successfully changed.' 34 >>> ftp.retrlines('LIST') # list directory contents 35 -rw-rw-r-- 1 1176 1176 1063 Jun 15 10:18 README 36 ... 37 drwxr-sr-x 5 1176 1176 4096 Dec 19 2000 pool 38 drwxr-sr-x 4 1176 1176 4096 Nov 17 2008 project 39 drwxr-xr-x 3 1176 1176 4096 Oct 10 2012 tools 40 '226 Directory send OK.' 41 >>> with open('README', 'wb') as fp: 42 >>> ftp.retrbinary('RETR README', fp.write) 43 '226 Transfer complete.' 44 >>> ftp.quit() 45 '221 Goodbye.' 46 47 48The module defines the following items: 49 50.. class:: FTP(host='', user='', passwd='', acct='', timeout=None, source_address=None, *, encoding='utf-8') 51 52 Return a new instance of the :class:`FTP` class. When *host* is given, the 53 method call ``connect(host)`` is made. When *user* is given, additionally 54 the method call ``login(user, passwd, acct)`` is made (where *passwd* and 55 *acct* default to the empty string when not given). The optional *timeout* 56 parameter specifies a timeout in seconds for blocking operations like the 57 connection attempt (if is not specified, the global default timeout setting 58 will be used). *source_address* is a 2-tuple ``(host, port)`` for the socket 59 to bind to as its source address before connecting. The *encoding* parameter 60 specifies the encoding for directories and filenames. 61 62 The :class:`FTP` class supports the :keyword:`with` statement, e.g.: 63 64 >>> from ftplib import FTP 65 >>> with FTP("ftp1.at.proftpd.org") as ftp: 66 ... ftp.login() 67 ... ftp.dir() 68 ... # doctest: +SKIP 69 '230 Anonymous login ok, restrictions apply.' 70 dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 . 71 dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 .. 72 dr-xr-xr-x 5 ftp ftp 4096 May 6 10:43 CentOS 73 dr-xr-xr-x 3 ftp ftp 18 Jul 10 2008 Fedora 74 >>> 75 76 .. versionchanged:: 3.2 77 Support for the :keyword:`with` statement was added. 78 79 .. versionchanged:: 3.3 80 *source_address* parameter was added. 81 82 .. versionchanged:: 3.9 83 If the *timeout* parameter is set to be zero, it will raise a 84 :class:`ValueError` to prevent the creation of a non-blocking socket. 85 The *encoding* parameter was added, and the default was changed from 86 Latin-1 to UTF-8 to follow :rfc:`2640`. 87 88.. class:: FTP_TLS(host='', user='', passwd='', acct='', keyfile=None, certfile=None, context=None, timeout=None, source_address=None, *, encoding='utf-8') 89 90 A :class:`FTP` subclass which adds TLS support to FTP as described in 91 :rfc:`4217`. 92 Connect as usual to port 21 implicitly securing the FTP control connection 93 before authenticating. Securing the data connection requires the user to 94 explicitly ask for it by calling the :meth:`prot_p` method. *context* 95 is a :class:`ssl.SSLContext` object which allows bundling SSL configuration 96 options, certificates and private keys into a single (potentially 97 long-lived) structure. Please read :ref:`ssl-security` for best practices. 98 99 *keyfile* and *certfile* are a legacy alternative to *context* -- they 100 can point to PEM-formatted private key and certificate chain files 101 (respectively) for the SSL connection. 102 103 .. versionadded:: 3.2 104 105 .. versionchanged:: 3.3 106 *source_address* parameter was added. 107 108 .. versionchanged:: 3.4 109 The class now supports hostname check with 110 :attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see 111 :data:`ssl.HAS_SNI`). 112 113 .. deprecated:: 3.6 114 115 *keyfile* and *certfile* are deprecated in favor of *context*. 116 Please use :meth:`ssl.SSLContext.load_cert_chain` instead, or let 117 :func:`ssl.create_default_context` select the system's trusted CA 118 certificates for you. 119 120 .. versionchanged:: 3.9 121 If the *timeout* parameter is set to be zero, it will raise a 122 :class:`ValueError` to prevent the creation of a non-blocking socket. 123 The *encoding* parameter was added, and the default was changed from 124 Latin-1 to UTF-8 to follow :rfc:`2640`. 125 126 Here's a sample session using the :class:`FTP_TLS` class:: 127 128 >>> ftps = FTP_TLS('ftp.pureftpd.org') 129 >>> ftps.login() 130 '230 Anonymous user logged in' 131 >>> ftps.prot_p() 132 '200 Data protection level set to "private"' 133 >>> ftps.nlst() 134 ['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'] 135 136 137.. exception:: error_reply 138 139 Exception raised when an unexpected reply is received from the server. 140 141 142.. exception:: error_temp 143 144 Exception raised when an error code signifying a temporary error (response 145 codes in the range 400--499) is received. 146 147 148.. exception:: error_perm 149 150 Exception raised when an error code signifying a permanent error (response 151 codes in the range 500--599) is received. 152 153 154.. exception:: error_proto 155 156 Exception raised when a reply is received from the server that does not fit 157 the response specifications of the File Transfer Protocol, i.e. begin with a 158 digit in the range 1--5. 159 160 161.. data:: all_errors 162 163 The set of all exceptions (as a tuple) that methods of :class:`FTP` 164 instances may raise as a result of problems with the FTP connection (as 165 opposed to programming errors made by the caller). This set includes the 166 four exceptions listed above as well as :exc:`OSError` and :exc:`EOFError`. 167 168 169.. seealso:: 170 171 Module :mod:`netrc` 172 Parser for the :file:`.netrc` file format. The file :file:`.netrc` is 173 typically used by FTP clients to load user authentication information 174 before prompting the user. 175 176 177.. _ftp-objects: 178 179FTP Objects 180----------- 181 182Several methods are available in two flavors: one for handling text files and 183another for binary files. These are named for the command which is used 184followed by ``lines`` for the text version or ``binary`` for the binary version. 185 186:class:`FTP` instances have the following methods: 187 188 189.. method:: FTP.set_debuglevel(level) 190 191 Set the instance's debugging level. This controls the amount of debugging 192 output printed. The default, ``0``, produces no debugging output. A value of 193 ``1`` produces a moderate amount of debugging output, generally a single line 194 per request. A value of ``2`` or higher produces the maximum amount of 195 debugging output, logging each line sent and received on the control connection. 196 197 198.. method:: FTP.connect(host='', port=0, timeout=None, source_address=None) 199 200 Connect to the given host and port. The default port number is ``21``, as 201 specified by the FTP protocol specification. It is rarely needed to specify a 202 different port number. This function should be called only once for each 203 instance; it should not be called at all if a host was given when the instance 204 was created. All other methods can only be used after a connection has been 205 made. 206 The optional *timeout* parameter specifies a timeout in seconds for the 207 connection attempt. If no *timeout* is passed, the global default timeout 208 setting will be used. 209 *source_address* is a 2-tuple ``(host, port)`` for the socket to bind to as 210 its source address before connecting. 211 212 .. audit-event:: ftplib.connect self,host,port ftplib.FTP.connect 213 214 .. versionchanged:: 3.3 215 *source_address* parameter was added. 216 217 218.. method:: FTP.getwelcome() 219 220 Return the welcome message sent by the server in reply to the initial 221 connection. (This message sometimes contains disclaimers or help information 222 that may be relevant to the user.) 223 224 225.. method:: FTP.login(user='anonymous', passwd='', acct='') 226 227 Log in as the given *user*. The *passwd* and *acct* parameters are optional and 228 default to the empty string. If no *user* is specified, it defaults to 229 ``'anonymous'``. If *user* is ``'anonymous'``, the default *passwd* is 230 ``'anonymous@'``. This function should be called only once for each instance, 231 after a connection has been established; it should not be called at all if a 232 host and user were given when the instance was created. Most FTP commands are 233 only allowed after the client has logged in. The *acct* parameter supplies 234 "accounting information"; few systems implement this. 235 236 237.. method:: FTP.abort() 238 239 Abort a file transfer that is in progress. Using this does not always work, but 240 it's worth a try. 241 242 243.. method:: FTP.sendcmd(cmd) 244 245 Send a simple command string to the server and return the response string. 246 247 .. audit-event:: ftplib.sendcmd self,cmd ftplib.FTP.sendcmd 248 249 250.. method:: FTP.voidcmd(cmd) 251 252 Send a simple command string to the server and handle the response. Return 253 nothing if a response code corresponding to success (codes in the range 254 200--299) is received. Raise :exc:`error_reply` otherwise. 255 256 .. audit-event:: ftplib.sendcmd self,cmd ftplib.FTP.voidcmd 257 258 259.. method:: FTP.retrbinary(cmd, callback, blocksize=8192, rest=None) 260 261 Retrieve a file in binary transfer mode. *cmd* should be an appropriate 262 ``RETR`` command: ``'RETR filename'``. The *callback* function is called for 263 each block of data received, with a single bytes argument giving the data 264 block. The optional *blocksize* argument specifies the maximum chunk size to 265 read on the low-level socket object created to do the actual transfer (which 266 will also be the largest size of the data blocks passed to *callback*). A 267 reasonable default is chosen. *rest* means the same thing as in the 268 :meth:`transfercmd` method. 269 270 271.. method:: FTP.retrlines(cmd, callback=None) 272 273 Retrieve a file or directory listing in the encoding specified by the 274 *encoding* parameter at initialization. 275 *cmd* should be an appropriate ``RETR`` command (see :meth:`retrbinary`) or 276 a command such as ``LIST`` or ``NLST`` (usually just the string ``'LIST'``). 277 ``LIST`` retrieves a list of files and information about those files. 278 ``NLST`` retrieves a list of file names. 279 The *callback* function is called for each line with a string argument 280 containing the line with the trailing CRLF stripped. The default *callback* 281 prints the line to ``sys.stdout``. 282 283 284.. method:: FTP.set_pasv(val) 285 286 Enable "passive" mode if *val* is true, otherwise disable passive mode. 287 Passive mode is on by default. 288 289 290.. method:: FTP.storbinary(cmd, fp, blocksize=8192, callback=None, rest=None) 291 292 Store a file in binary transfer mode. *cmd* should be an appropriate 293 ``STOR`` command: ``"STOR filename"``. *fp* is a :term:`file object` 294 (opened in binary mode) which is read until EOF using its :meth:`~io.IOBase.read` 295 method in blocks of size *blocksize* to provide the data to be stored. 296 The *blocksize* argument defaults to 8192. *callback* is an optional single 297 parameter callable that is called on each block of data after it is sent. 298 *rest* means the same thing as in the :meth:`transfercmd` method. 299 300 .. versionchanged:: 3.2 301 *rest* parameter added. 302 303 304.. method:: FTP.storlines(cmd, fp, callback=None) 305 306 Store a file in line mode. *cmd* should be an appropriate 307 ``STOR`` command (see :meth:`storbinary`). Lines are read until EOF from the 308 :term:`file object` *fp* (opened in binary mode) using its :meth:`~io.IOBase.readline` 309 method to provide the data to be stored. *callback* is an optional single 310 parameter callable that is called on each line after it is sent. 311 312 313.. method:: FTP.transfercmd(cmd, rest=None) 314 315 Initiate a transfer over the data connection. If the transfer is active, send an 316 ``EPRT`` or ``PORT`` command and the transfer command specified by *cmd*, and 317 accept the connection. If the server is passive, send an ``EPSV`` or ``PASV`` 318 command, connect to it, and start the transfer command. Either way, return the 319 socket for the connection. 320 321 If optional *rest* is given, a ``REST`` command is sent to the server, passing 322 *rest* as an argument. *rest* is usually a byte offset into the requested file, 323 telling the server to restart sending the file's bytes at the requested offset, 324 skipping over the initial bytes. Note however that the :meth:`transfercmd` 325 method converts *rest* to a string with the *encoding* parameter specified 326 at initialization, but no check is performed on the string's contents. If the 327 server does not recognize the ``REST`` command, an :exc:`error_reply` exception 328 will be raised. If this happens, simply call :meth:`transfercmd` without a 329 *rest* argument. 330 331 332.. method:: FTP.ntransfercmd(cmd, rest=None) 333 334 Like :meth:`transfercmd`, but returns a tuple of the data connection and the 335 expected size of the data. If the expected size could not be computed, ``None`` 336 will be returned as the expected size. *cmd* and *rest* means the same thing as 337 in :meth:`transfercmd`. 338 339 340.. method:: FTP.mlsd(path="", facts=[]) 341 342 List a directory in a standardized format by using ``MLSD`` command 343 (:rfc:`3659`). If *path* is omitted the current directory is assumed. 344 *facts* is a list of strings representing the type of information desired 345 (e.g. ``["type", "size", "perm"]``). Return a generator object yielding a 346 tuple of two elements for every file found in path. First element is the 347 file name, the second one is a dictionary containing facts about the file 348 name. Content of this dictionary might be limited by the *facts* argument 349 but server is not guaranteed to return all requested facts. 350 351 .. versionadded:: 3.3 352 353 354.. method:: FTP.nlst(argument[, ...]) 355 356 Return a list of file names as returned by the ``NLST`` command. The 357 optional *argument* is a directory to list (default is the current server 358 directory). Multiple arguments can be used to pass non-standard options to 359 the ``NLST`` command. 360 361 .. note:: If your server supports the command, :meth:`mlsd` offers a better API. 362 363 364.. method:: FTP.dir(argument[, ...]) 365 366 Produce a directory listing as returned by the ``LIST`` command, printing it to 367 standard output. The optional *argument* is a directory to list (default is the 368 current server directory). Multiple arguments can be used to pass non-standard 369 options to the ``LIST`` command. If the last argument is a function, it is used 370 as a *callback* function as for :meth:`retrlines`; the default prints to 371 ``sys.stdout``. This method returns ``None``. 372 373 .. note:: If your server supports the command, :meth:`mlsd` offers a better API. 374 375 376.. method:: FTP.rename(fromname, toname) 377 378 Rename file *fromname* on the server to *toname*. 379 380 381.. method:: FTP.delete(filename) 382 383 Remove the file named *filename* from the server. If successful, returns the 384 text of the response, otherwise raises :exc:`error_perm` on permission errors or 385 :exc:`error_reply` on other errors. 386 387 388.. method:: FTP.cwd(pathname) 389 390 Set the current directory on the server. 391 392 393.. method:: FTP.mkd(pathname) 394 395 Create a new directory on the server. 396 397 398.. method:: FTP.pwd() 399 400 Return the pathname of the current directory on the server. 401 402 403.. method:: FTP.rmd(dirname) 404 405 Remove the directory named *dirname* on the server. 406 407 408.. method:: FTP.size(filename) 409 410 Request the size of the file named *filename* on the server. On success, the 411 size of the file is returned as an integer, otherwise ``None`` is returned. 412 Note that the ``SIZE`` command is not standardized, but is supported by many 413 common server implementations. 414 415 416.. method:: FTP.quit() 417 418 Send a ``QUIT`` command to the server and close the connection. This is the 419 "polite" way to close a connection, but it may raise an exception if the server 420 responds with an error to the ``QUIT`` command. This implies a call to the 421 :meth:`close` method which renders the :class:`FTP` instance useless for 422 subsequent calls (see below). 423 424 425.. method:: FTP.close() 426 427 Close the connection unilaterally. This should not be applied to an already 428 closed connection such as after a successful call to :meth:`~FTP.quit`. 429 After this call the :class:`FTP` instance should not be used any more (after 430 a call to :meth:`close` or :meth:`~FTP.quit` you cannot reopen the 431 connection by issuing another :meth:`login` method). 432 433 434FTP_TLS Objects 435--------------- 436 437:class:`FTP_TLS` class inherits from :class:`FTP`, defining these additional objects: 438 439.. attribute:: FTP_TLS.ssl_version 440 441 The SSL version to use (defaults to :attr:`ssl.PROTOCOL_SSLv23`). 442 443.. method:: FTP_TLS.auth() 444 445 Set up a secure control connection by using TLS or SSL, depending on what 446 is specified in the :attr:`ssl_version` attribute. 447 448 .. versionchanged:: 3.4 449 The method now supports hostname check with 450 :attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see 451 :data:`ssl.HAS_SNI`). 452 453.. method:: FTP_TLS.ccc() 454 455 Revert control channel back to plaintext. This can be useful to take 456 advantage of firewalls that know how to handle NAT with non-secure FTP 457 without opening fixed ports. 458 459 .. versionadded:: 3.3 460 461.. method:: FTP_TLS.prot_p() 462 463 Set up secure data connection. 464 465.. method:: FTP_TLS.prot_c() 466 467 Set up clear text data connection. 468