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