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