xref: /third_party/python/Doc/library/ftplib.rst (revision 7db96d56)
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