blob: 857f4138fb96838459d5f28565e032c139bf0a16 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001: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
12This module defines the class :class:`FTP` and a few related items. The
13:class:`FTP` class implements the client side of the FTP protocol. You can use
14this to write Python programs that perform a variety of automated FTP jobs, such
Senthil Kumaranaca8fd72008-06-23 04:41:59 +000015as mirroring other ftp servers. It is also used by the module
16:mod:`urllib.request` to handle URLs that use FTP. For more information on FTP
17(File Transfer Protocol), see Internet :rfc:`959`.
Georg Brandl116aa622007-08-15 14:28:22 +000018
19Here's a sample session using the :mod:`ftplib` module::
20
21 >>> from ftplib import FTP
22 >>> ftp = FTP('ftp.cwi.nl') # connect to host, default port
23 >>> ftp.login() # user anonymous, passwd anonymous@
24 >>> ftp.retrlines('LIST') # list directory contents
25 total 24418
26 drwxrwsr-x 5 ftp-usr pdmaint 1536 Mar 20 09:48 .
27 dr-xr-srwt 105 ftp-usr pdmaint 1536 Mar 21 14:32 ..
28 -rw-r--r-- 1 ftp-usr pdmaint 5305 Mar 20 09:48 INDEX
29 .
30 .
31 .
32 >>> ftp.retrbinary('RETR README', open('README', 'wb').write)
33 '226 Transfer complete.'
34 >>> ftp.quit()
35
Georg Brandl116aa622007-08-15 14:28:22 +000036
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +000037The module defines the following items:
Georg Brandl116aa622007-08-15 14:28:22 +000038
Georg Brandl036490d2009-05-17 13:00:36 +000039.. class:: FTP(host='', user='', passwd='', acct=''[, timeout])
Georg Brandl116aa622007-08-15 14:28:22 +000040
41 Return a new instance of the :class:`FTP` class. When *host* is given, the
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +000042 method call ``connect(host)`` is made. When *user* is given, additionally
43 the method call ``login(user, passwd, acct)`` is made (where *passwd* and
44 *acct* default to the empty string when not given). The optional *timeout*
45 parameter specifies a timeout in seconds for blocking operations like the
Georg Brandlf78e02b2008-06-10 17:40:04 +000046 connection attempt (if is not specified, the global default timeout setting
47 will be used).
Georg Brandl116aa622007-08-15 14:28:22 +000048
Giampaolo RodolĂ bd576b72010-05-10 14:53:29 +000049 :class:`FTP` class supports the :keyword:`with` statement. Here is a sample
50 on how using it:
51
52 >>> from ftplib import FTP
53 >>> with FTP("ftp1.at.proftpd.org") as ftp:
54 ... ftp.login()
55 ... ftp.dir()
56 ...
57 '230 Anonymous login ok, restrictions apply.'
58 dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 .
59 dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 ..
60 dr-xr-xr-x 5 ftp ftp 4096 May 6 10:43 CentOS
61 dr-xr-xr-x 3 ftp ftp 18 Jul 10 2008 Fedora
62 >>>
63
64 .. versionchanged:: 3.2
65 Support for the :keyword:`with` statement was added.
66
67
Antoine Pitrouf988cd02009-11-17 20:21:14 +000068.. class:: FTP_TLS(host='', user='', passwd='', acct='', [keyfile[, certfile[, timeout]]])
69
70 A :class:`FTP` subclass which adds TLS support to FTP as described in
71 :rfc:`4217`.
72 Connect as usual to port 21 implicitly securing the FTP control connection
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +000073 before authenticating. Securing the data connection requires the user to
74 explicitly ask for it by calling the :meth:`prot_p` method.
75 *keyfile* and *certfile* are optional -- they can contain a PEM formatted
76 private key and certificate chain file name for the SSL connection.
Antoine Pitrouf988cd02009-11-17 20:21:14 +000077
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +000078 .. versionadded:: 3.2
Antoine Pitrouf988cd02009-11-17 20:21:14 +000079
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +000080 Here's a sample session using the :class:`FTP_TLS` class:
Antoine Pitrouf988cd02009-11-17 20:21:14 +000081
82 >>> from ftplib import FTP_TLS
83 >>> ftps = FTP_TLS('ftp.python.org')
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +000084 >>> ftps.login() # login anonymously before securing control channel
85 >>> ftps.prot_p() # switch to secure data connection
86 >>> ftps.retrlines('LIST') # list directory content securely
Antoine Pitrouf988cd02009-11-17 20:21:14 +000087 total 9
88 drwxr-xr-x 8 root wheel 1024 Jan 3 1994 .
89 drwxr-xr-x 8 root wheel 1024 Jan 3 1994 ..
90 drwxr-xr-x 2 root wheel 1024 Jan 3 1994 bin
91 drwxr-xr-x 2 root wheel 1024 Jan 3 1994 etc
92 d-wxrwxr-x 2 ftp wheel 1024 Sep 5 13:43 incoming
93 drwxr-xr-x 2 root wheel 1024 Nov 17 1993 lib
94 drwxr-xr-x 6 1094 wheel 1024 Sep 13 19:07 pub
95 drwxr-xr-x 3 root wheel 1024 Jan 3 1994 usr
96 -rw-r--r-- 1 root root 312 Aug 1 1994 welcome.msg
97 '226 Transfer complete.'
98 >>> ftps.quit()
99 >>>
100
101
Georg Brandl036490d2009-05-17 13:00:36 +0000102.. exception:: error_reply
Georg Brandl116aa622007-08-15 14:28:22 +0000103
Georg Brandl036490d2009-05-17 13:00:36 +0000104 Exception raised when an unexpected reply is received from the server.
Georg Brandl116aa622007-08-15 14:28:22 +0000105
106
Georg Brandl036490d2009-05-17 13:00:36 +0000107.. exception:: error_temp
Georg Brandl116aa622007-08-15 14:28:22 +0000108
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000109 Exception raised when an unexpected reply is received from the server.
Georg Brandl116aa622007-08-15 14:28:22 +0000110
Georg Brandl036490d2009-05-17 13:00:36 +0000111.. exception:: error_perm
Georg Brandl116aa622007-08-15 14:28:22 +0000112
Georg Brandl036490d2009-05-17 13:00:36 +0000113 Exception raised when an error code in the range 500--599 is received.
Georg Brandl116aa622007-08-15 14:28:22 +0000114
Georg Brandl036490d2009-05-17 13:00:36 +0000115.. exception:: error_proto
Georg Brandl116aa622007-08-15 14:28:22 +0000116
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000117 Exception raised when a reply is received from the server that does not
118 begin with a digit in the range 1--5.
Georg Brandl116aa622007-08-15 14:28:22 +0000119
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000120.. data:: all_errors
121
122 The set of all exceptions (as a tuple) that methods of :class:`FTP`
123 instances may raise as a result of problems with the FTP connection (as
124 opposed to programming errors made by the caller). This set includes the
125 four exceptions listed below as well as :exc:`socket.error` and
126 :exc:`IOError`.
Georg Brandl116aa622007-08-15 14:28:22 +0000127
128.. seealso::
129
130 Module :mod:`netrc`
Georg Brandl036490d2009-05-17 13:00:36 +0000131 Parser for the :file:`.netrc` file format. The file :file:`.netrc` is
132 typically used by FTP clients to load user authentication information
133 before prompting the user.
Georg Brandl116aa622007-08-15 14:28:22 +0000134
135 .. index:: single: ftpmirror.py
136
137 The file :file:`Tools/scripts/ftpmirror.py` in the Python source distribution is
138 a script that can mirror FTP sites, or portions thereof, using the :mod:`ftplib`
139 module. It can be used as an extended example that applies this module.
140
141
142.. _ftp-objects:
143
144FTP Objects
145-----------
146
147Several methods are available in two flavors: one for handling text files and
148another for binary files. These are named for the command which is used
149followed by ``lines`` for the text version or ``binary`` for the binary version.
150
151:class:`FTP` instances have the following methods:
152
153
154.. method:: FTP.set_debuglevel(level)
155
156 Set the instance's debugging level. This controls the amount of debugging
157 output printed. The default, ``0``, produces no debugging output. A value of
158 ``1`` produces a moderate amount of debugging output, generally a single line
159 per request. A value of ``2`` or higher produces the maximum amount of
160 debugging output, logging each line sent and received on the control connection.
161
162
Georg Brandl036490d2009-05-17 13:00:36 +0000163.. method:: FTP.connect(host='', port=0[, timeout])
Georg Brandl116aa622007-08-15 14:28:22 +0000164
165 Connect to the given host and port. The default port number is ``21``, as
166 specified by the FTP protocol specification. It is rarely needed to specify a
167 different port number. This function should be called only once for each
168 instance; it should not be called at all if a host was given when the instance
169 was created. All other methods can only be used after a connection has been
170 made.
171
172 The optional *timeout* parameter specifies a timeout in seconds for the
Georg Brandlf78e02b2008-06-10 17:40:04 +0000173 connection attempt. If no *timeout* is passed, the global default timeout
174 setting will be used.
Georg Brandl116aa622007-08-15 14:28:22 +0000175
Georg Brandl116aa622007-08-15 14:28:22 +0000176
177.. method:: FTP.getwelcome()
178
179 Return the welcome message sent by the server in reply to the initial
180 connection. (This message sometimes contains disclaimers or help information
181 that may be relevant to the user.)
182
183
Georg Brandl036490d2009-05-17 13:00:36 +0000184.. method:: FTP.login(user='anonymous', passwd='', acct='')
Georg Brandl116aa622007-08-15 14:28:22 +0000185
186 Log in as the given *user*. The *passwd* and *acct* parameters are optional and
187 default to the empty string. If no *user* is specified, it defaults to
188 ``'anonymous'``. If *user* is ``'anonymous'``, the default *passwd* is
189 ``'anonymous@'``. This function should be called only once for each instance,
190 after a connection has been established; it should not be called at all if a
191 host and user were given when the instance was created. Most FTP commands are
Benjamin Peterson8719ad52009-09-11 22:24:02 +0000192 only allowed after the client has logged in. The *acct* parameter supplies
193 "accounting information"; few systems implement this.
Georg Brandl116aa622007-08-15 14:28:22 +0000194
195
196.. method:: FTP.abort()
197
198 Abort a file transfer that is in progress. Using this does not always work, but
199 it's worth a try.
200
201
Georg Brandl036490d2009-05-17 13:00:36 +0000202.. method:: FTP.sendcmd(cmd)
Georg Brandl116aa622007-08-15 14:28:22 +0000203
204 Send a simple command string to the server and return the response string.
205
206
Georg Brandl036490d2009-05-17 13:00:36 +0000207.. method:: FTP.voidcmd(cmd)
Georg Brandl116aa622007-08-15 14:28:22 +0000208
209 Send a simple command string to the server and handle the response. Return
210 nothing if a response code in the range 200--299 is received. Raise an exception
211 otherwise.
212
213
Georg Brandl036490d2009-05-17 13:00:36 +0000214.. method:: FTP.retrbinary(cmd, callback, blocksize=8192, rest=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000215
Georg Brandl036490d2009-05-17 13:00:36 +0000216 Retrieve a file in binary transfer mode. *cmd* should be an appropriate
Georg Brandl116aa622007-08-15 14:28:22 +0000217 ``RETR`` command: ``'RETR filename'``. The *callback* function is called for
218 each block of data received, with a single string argument giving the data
Georg Brandl036490d2009-05-17 13:00:36 +0000219 block. The optional *blocksize* argument specifies the maximum chunk size to
Georg Brandl116aa622007-08-15 14:28:22 +0000220 read on the low-level socket object created to do the actual transfer (which
221 will also be the largest size of the data blocks passed to *callback*). A
222 reasonable default is chosen. *rest* means the same thing as in the
223 :meth:`transfercmd` method.
224
225
Georg Brandl036490d2009-05-17 13:00:36 +0000226.. method:: FTP.retrlines(cmd, callback=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000227
Georg Brandl036490d2009-05-17 13:00:36 +0000228 Retrieve a file or directory listing in ASCII transfer mode. *cmd*
Christian Heimesaf98da12008-01-27 15:18:18 +0000229 should be an appropriate ``RETR`` command (see :meth:`retrbinary`) or a
230 command such as ``LIST``, ``NLST`` or ``MLSD`` (usually just the string
231 ``'LIST'``). The *callback* function is called for each line, with the
232 trailing CRLF stripped. The default *callback* prints the line to
233 ``sys.stdout``.
Georg Brandl116aa622007-08-15 14:28:22 +0000234
235
236.. method:: FTP.set_pasv(boolean)
237
Georg Brandle6bcc912008-05-12 18:05:20 +0000238 Enable "passive" mode if *boolean* is true, other disable passive mode.
239 Passive mode is on by default.
Georg Brandl116aa622007-08-15 14:28:22 +0000240
241
Antoine Pitrou648bcd72009-11-27 13:23:26 +0000242.. method:: FTP.storbinary(cmd, file, blocksize=8192, callback=None, rest=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000243
Georg Brandl036490d2009-05-17 13:00:36 +0000244 Store a file in binary transfer mode. *cmd* should be an appropriate
Georg Brandl116aa622007-08-15 14:28:22 +0000245 ``STOR`` command: ``"STOR filename"``. *file* is an open file object which is
246 read until EOF using its :meth:`read` method in blocks of size *blocksize* to
247 provide the data to be stored. The *blocksize* argument defaults to 8192.
Christian Heimesaf98da12008-01-27 15:18:18 +0000248 *callback* is an optional single parameter callable that is called
Antoine Pitrou648bcd72009-11-27 13:23:26 +0000249 on each block of data after it is sent. *rest* means the same thing as in
250 the :meth:`transfercmd` method.
251
252 .. versionchanged:: 3.2
253 *rest* parameter added.
Georg Brandl116aa622007-08-15 14:28:22 +0000254
Georg Brandl116aa622007-08-15 14:28:22 +0000255
Georg Brandl036490d2009-05-17 13:00:36 +0000256.. method:: FTP.storlines(cmd, file, callback=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000257
Georg Brandl036490d2009-05-17 13:00:36 +0000258 Store a file in ASCII transfer mode. *cmd* should be an appropriate
Georg Brandl116aa622007-08-15 14:28:22 +0000259 ``STOR`` command (see :meth:`storbinary`). Lines are read until EOF from the
260 open file object *file* using its :meth:`readline` method to provide the data to
Christian Heimesaf98da12008-01-27 15:18:18 +0000261 be stored. *callback* is an optional single parameter callable
262 that is called on each line after it is sent.
Georg Brandl116aa622007-08-15 14:28:22 +0000263
264
Georg Brandl036490d2009-05-17 13:00:36 +0000265.. method:: FTP.transfercmd(cmd, rest=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000266
267 Initiate a transfer over the data connection. If the transfer is active, send a
268 ``EPRT`` or ``PORT`` command and the transfer command specified by *cmd*, and
269 accept the connection. If the server is passive, send a ``EPSV`` or ``PASV``
270 command, connect to it, and start the transfer command. Either way, return the
271 socket for the connection.
272
273 If optional *rest* is given, a ``REST`` command is sent to the server, passing
274 *rest* as an argument. *rest* is usually a byte offset into the requested file,
275 telling the server to restart sending the file's bytes at the requested offset,
276 skipping over the initial bytes. Note however that RFC 959 requires only that
277 *rest* be a string containing characters in the printable range from ASCII code
278 33 to ASCII code 126. The :meth:`transfercmd` method, therefore, converts
279 *rest* to a string, but no check is performed on the string's contents. If the
280 server does not recognize the ``REST`` command, an :exc:`error_reply` exception
281 will be raised. If this happens, simply call :meth:`transfercmd` without a
282 *rest* argument.
283
284
Georg Brandl036490d2009-05-17 13:00:36 +0000285.. method:: FTP.ntransfercmd(cmd, rest=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000286
287 Like :meth:`transfercmd`, but returns a tuple of the data connection and the
288 expected size of the data. If the expected size could not be computed, ``None``
289 will be returned as the expected size. *cmd* and *rest* means the same thing as
290 in :meth:`transfercmd`.
291
292
293.. method:: FTP.nlst(argument[, ...])
294
295 Return a list of files as returned by the ``NLST`` command. The optional
296 *argument* is a directory to list (default is the current server directory).
297 Multiple arguments can be used to pass non-standard options to the ``NLST``
298 command.
299
300
301.. method:: FTP.dir(argument[, ...])
302
303 Produce a directory listing as returned by the ``LIST`` command, printing it to
304 standard output. The optional *argument* is a directory to list (default is the
305 current server directory). Multiple arguments can be used to pass non-standard
306 options to the ``LIST`` command. If the last argument is a function, it is used
307 as a *callback* function as for :meth:`retrlines`; the default prints to
308 ``sys.stdout``. This method returns ``None``.
309
310
311.. method:: FTP.rename(fromname, toname)
312
313 Rename file *fromname* on the server to *toname*.
314
315
316.. method:: FTP.delete(filename)
317
318 Remove the file named *filename* from the server. If successful, returns the
319 text of the response, otherwise raises :exc:`error_perm` on permission errors or
320 :exc:`error_reply` on other errors.
321
322
323.. method:: FTP.cwd(pathname)
324
325 Set the current directory on the server.
326
327
328.. method:: FTP.mkd(pathname)
329
330 Create a new directory on the server.
331
332
333.. method:: FTP.pwd()
334
335 Return the pathname of the current directory on the server.
336
337
338.. method:: FTP.rmd(dirname)
339
340 Remove the directory named *dirname* on the server.
341
342
343.. method:: FTP.size(filename)
344
345 Request the size of the file named *filename* on the server. On success, the
346 size of the file is returned as an integer, otherwise ``None`` is returned.
347 Note that the ``SIZE`` command is not standardized, but is supported by many
348 common server implementations.
349
350
351.. method:: FTP.quit()
352
353 Send a ``QUIT`` command to the server and close the connection. This is the
Benjamin Petersonf10a79a2008-10-11 00:49:57 +0000354 "polite" way to close a connection, but it may raise an exception if the server
Georg Brandl2ee470f2008-07-16 12:55:28 +0000355 responds with an error to the ``QUIT`` command. This implies a call to the
Georg Brandl116aa622007-08-15 14:28:22 +0000356 :meth:`close` method which renders the :class:`FTP` instance useless for
357 subsequent calls (see below).
358
359
360.. method:: FTP.close()
361
362 Close the connection unilaterally. This should not be applied to an already
363 closed connection such as after a successful call to :meth:`quit`. After this
364 call the :class:`FTP` instance should not be used any more (after a call to
365 :meth:`close` or :meth:`quit` you cannot reopen the connection by issuing
366 another :meth:`login` method).
367
Antoine Pitrouf988cd02009-11-17 20:21:14 +0000368
369FTP_TLS Objects
370---------------
371
372:class:`FTP_TLS` class inherits from :class:`FTP`, defining these additional objects:
373
374.. attribute:: FTP_TLS.ssl_version
375
376 The SSL version to use (defaults to *TLSv1*).
377
378.. method:: FTP_TLS.auth()
379
380 Set up secure control connection by using TLS or SSL, depending on what specified in :meth:`ssl_version` attribute.
381
382.. method:: FTP_TLS.prot_p()
383
384 Set up secure data connection.
385
386.. method:: FTP_TLS.prot_c()
387
388 Set up clear text data connection.
389
390