blob: 7f98d0bd81b0d8a9aa30a68b25304028513f8a12 [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
Raymond Hettingerd8de5412011-02-21 19:58:37 +000012**Source code:** :source:`Lib/ftplib.py`
Raymond Hettinger469271d2011-01-27 20:38:46 +000013
14--------------
15
Georg Brandl116aa622007-08-15 14:28:22 +000016This 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
Senthil Kumaranaca8fd72008-06-23 04:41:59 +000019as mirroring other ftp servers. It is also used by the module
20:mod:`urllib.request` to handle URLs that use FTP. For more information on FTP
21(File Transfer Protocol), see Internet :rfc:`959`.
Georg Brandl116aa622007-08-15 14:28:22 +000022
23Here's a sample session using the :mod:`ftplib` module::
24
25 >>> from ftplib import FTP
Georg Brandl036e41d2013-10-06 18:17:56 +020026 >>> 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.'
Georg Brandl116aa622007-08-15 14:28:22 +000037 >>> ftp.retrbinary('RETR README', open('README', 'wb').write)
38 '226 Transfer complete.'
39 >>> ftp.quit()
40
Georg Brandl116aa622007-08-15 14:28:22 +000041
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +000042The module defines the following items:
Georg Brandl116aa622007-08-15 14:28:22 +000043
Giampaolo Rodolà396ff062011-02-28 19:19:51 +000044.. class:: FTP(host='', user='', passwd='', acct='', timeout=None, source_address=None)
Georg Brandl116aa622007-08-15 14:28:22 +000045
46 Return a new instance of the :class:`FTP` class. When *host* is given, the
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +000047 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
Georg Brandlf78e02b2008-06-10 17:40:04 +000051 connection attempt (if is not specified, the global default timeout setting
Giampaolo Rodolà396ff062011-02-28 19:19:51 +000052 will be used). *source_address* is a 2-tuple ``(host, port)`` for the socket
53 to bind to as its source address before connecting.
Georg Brandl116aa622007-08-15 14:28:22 +000054
Giampaolo Rodolàbd576b72010-05-10 14:53:29 +000055 :class:`FTP` class supports the :keyword:`with` statement. Here is a sample
56 on how using it:
57
58 >>> from ftplib import FTP
59 >>> with FTP("ftp1.at.proftpd.org") as ftp:
60 ... ftp.login()
61 ... ftp.dir()
62 ...
63 '230 Anonymous login ok, restrictions apply.'
64 dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 .
65 dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 ..
66 dr-xr-xr-x 5 ftp ftp 4096 May 6 10:43 CentOS
67 dr-xr-xr-x 3 ftp ftp 18 Jul 10 2008 Fedora
68 >>>
69
70 .. versionchanged:: 3.2
71 Support for the :keyword:`with` statement was added.
72
Giampaolo Rodolà396ff062011-02-28 19:19:51 +000073 .. versionchanged:: 3.3
74 *source_address* parameter was added.
Giampaolo Rodolàbd576b72010-05-10 14:53:29 +000075
Giampaolo Rodolà396ff062011-02-28 19:19:51 +000076
77.. class:: FTP_TLS(host='', user='', passwd='', acct='', keyfile=None, certfile=None, context=None, timeout=None, source_address=None)
Antoine Pitrouf988cd02009-11-17 20:21:14 +000078
79 A :class:`FTP` subclass which adds TLS support to FTP as described in
80 :rfc:`4217`.
81 Connect as usual to port 21 implicitly securing the FTP control connection
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +000082 before authenticating. Securing the data connection requires the user to
83 explicitly ask for it by calling the :meth:`prot_p` method.
84 *keyfile* and *certfile* are optional -- they can contain a PEM formatted
85 private key and certificate chain file name for the SSL connection.
Giampaolo Rodolàa67299e2010-05-26 18:06:04 +000086 *context* parameter is a :class:`ssl.SSLContext` object which allows
87 bundling SSL configuration options, certificates and private keys into a
Giampaolo Rodolà396ff062011-02-28 19:19:51 +000088 single (potentially long-lived) structure. *source_address* is a 2-tuple
89 ``(host, port)`` for the socket to bind to as its source address before
90 connecting.
Antoine Pitrouf988cd02009-11-17 20:21:14 +000091
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +000092 .. versionadded:: 3.2
Antoine Pitrouf988cd02009-11-17 20:21:14 +000093
Giampaolo Rodolà396ff062011-02-28 19:19:51 +000094 .. versionchanged:: 3.3
95 *source_address* parameter was added.
96
Christian Heimese5b5edf2013-12-02 02:56:02 +010097 .. versionchanged:: 3.4
98 The class now supports hostname check with
99 :attr:`SSLContext.check_hostname` and *Server Name Indicator* (see
100 :data:`~ssl.HAS_SNI`).
101
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000102 Here's a sample session using the :class:`FTP_TLS` class:
Antoine Pitrouf988cd02009-11-17 20:21:14 +0000103
104 >>> from ftplib import FTP_TLS
105 >>> ftps = FTP_TLS('ftp.python.org')
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000106 >>> ftps.login() # login anonymously before securing control channel
107 >>> ftps.prot_p() # switch to secure data connection
108 >>> ftps.retrlines('LIST') # list directory content securely
Antoine Pitrouf988cd02009-11-17 20:21:14 +0000109 total 9
110 drwxr-xr-x 8 root wheel 1024 Jan 3 1994 .
111 drwxr-xr-x 8 root wheel 1024 Jan 3 1994 ..
112 drwxr-xr-x 2 root wheel 1024 Jan 3 1994 bin
113 drwxr-xr-x 2 root wheel 1024 Jan 3 1994 etc
114 d-wxrwxr-x 2 ftp wheel 1024 Sep 5 13:43 incoming
115 drwxr-xr-x 2 root wheel 1024 Nov 17 1993 lib
116 drwxr-xr-x 6 1094 wheel 1024 Sep 13 19:07 pub
117 drwxr-xr-x 3 root wheel 1024 Jan 3 1994 usr
118 -rw-r--r-- 1 root root 312 Aug 1 1994 welcome.msg
119 '226 Transfer complete.'
120 >>> ftps.quit()
121 >>>
122
123
Georg Brandl036490d2009-05-17 13:00:36 +0000124.. exception:: error_reply
Georg Brandl116aa622007-08-15 14:28:22 +0000125
Georg Brandl036490d2009-05-17 13:00:36 +0000126 Exception raised when an unexpected reply is received from the server.
Georg Brandl116aa622007-08-15 14:28:22 +0000127
128
Georg Brandl036490d2009-05-17 13:00:36 +0000129.. exception:: error_temp
Georg Brandl116aa622007-08-15 14:28:22 +0000130
Georg Brandl392c92a2010-10-15 19:46:19 +0000131 Exception raised when an error code signifying a temporary error (response
132 codes in the range 400--499) is received.
133
Georg Brandl116aa622007-08-15 14:28:22 +0000134
Georg Brandl036490d2009-05-17 13:00:36 +0000135.. exception:: error_perm
Georg Brandl116aa622007-08-15 14:28:22 +0000136
Georg Brandl392c92a2010-10-15 19:46:19 +0000137 Exception raised when an error code signifying a permanent error (response
138 codes in the range 500--599) is received.
139
Georg Brandl116aa622007-08-15 14:28:22 +0000140
Georg Brandl036490d2009-05-17 13:00:36 +0000141.. exception:: error_proto
Georg Brandl116aa622007-08-15 14:28:22 +0000142
Georg Brandl392c92a2010-10-15 19:46:19 +0000143 Exception raised when a reply is received from the server that does not fit
144 the response specifications of the File Transfer Protocol, i.e. begin with a
145 digit in the range 1--5.
146
Georg Brandl116aa622007-08-15 14:28:22 +0000147
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000148.. data:: all_errors
149
150 The set of all exceptions (as a tuple) that methods of :class:`FTP`
151 instances may raise as a result of problems with the FTP connection (as
152 opposed to programming errors made by the caller). This set includes the
Antoine Pitrou5574c302011-10-12 17:53:43 +0200153 four exceptions listed above as well as :exc:`OSError`.
Georg Brandl116aa622007-08-15 14:28:22 +0000154
Georg Brandl392c92a2010-10-15 19:46:19 +0000155
Georg Brandl116aa622007-08-15 14:28:22 +0000156.. seealso::
157
158 Module :mod:`netrc`
Georg Brandl036490d2009-05-17 13:00:36 +0000159 Parser for the :file:`.netrc` file format. The file :file:`.netrc` is
160 typically used by FTP clients to load user authentication information
161 before prompting the user.
Georg Brandl116aa622007-08-15 14:28:22 +0000162
163 .. index:: single: ftpmirror.py
164
165 The file :file:`Tools/scripts/ftpmirror.py` in the Python source distribution is
166 a script that can mirror FTP sites, or portions thereof, using the :mod:`ftplib`
167 module. It can be used as an extended example that applies this module.
168
169
170.. _ftp-objects:
171
172FTP Objects
173-----------
174
175Several methods are available in two flavors: one for handling text files and
176another for binary files. These are named for the command which is used
177followed by ``lines`` for the text version or ``binary`` for the binary version.
178
179:class:`FTP` instances have the following methods:
180
181
182.. method:: FTP.set_debuglevel(level)
183
184 Set the instance's debugging level. This controls the amount of debugging
185 output printed. The default, ``0``, produces no debugging output. A value of
186 ``1`` produces a moderate amount of debugging output, generally a single line
187 per request. A value of ``2`` or higher produces the maximum amount of
188 debugging output, logging each line sent and received on the control connection.
189
190
Giampaolo Rodolà396ff062011-02-28 19:19:51 +0000191.. method:: FTP.connect(host='', port=0, timeout=None, source_address=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000192
193 Connect to the given host and port. The default port number is ``21``, as
194 specified by the FTP protocol specification. It is rarely needed to specify a
195 different port number. This function should be called only once for each
196 instance; it should not be called at all if a host was given when the instance
197 was created. All other methods can only be used after a connection has been
198 made.
Georg Brandl116aa622007-08-15 14:28:22 +0000199 The optional *timeout* parameter specifies a timeout in seconds for the
Georg Brandlf78e02b2008-06-10 17:40:04 +0000200 connection attempt. If no *timeout* is passed, the global default timeout
201 setting will be used.
Giampaolo Rodolà396ff062011-02-28 19:19:51 +0000202 *source_address* is a 2-tuple ``(host, port)`` for the socket to bind to as
203 its source address before connecting.
204
205 .. versionchanged:: 3.3
206 *source_address* parameter was added.
Georg Brandl116aa622007-08-15 14:28:22 +0000207
Georg Brandl116aa622007-08-15 14:28:22 +0000208
209.. method:: FTP.getwelcome()
210
211 Return the welcome message sent by the server in reply to the initial
212 connection. (This message sometimes contains disclaimers or help information
213 that may be relevant to the user.)
214
215
Georg Brandl036490d2009-05-17 13:00:36 +0000216.. method:: FTP.login(user='anonymous', passwd='', acct='')
Georg Brandl116aa622007-08-15 14:28:22 +0000217
218 Log in as the given *user*. The *passwd* and *acct* parameters are optional and
219 default to the empty string. If no *user* is specified, it defaults to
220 ``'anonymous'``. If *user* is ``'anonymous'``, the default *passwd* is
221 ``'anonymous@'``. This function should be called only once for each instance,
222 after a connection has been established; it should not be called at all if a
223 host and user were given when the instance was created. Most FTP commands are
Benjamin Peterson8719ad52009-09-11 22:24:02 +0000224 only allowed after the client has logged in. The *acct* parameter supplies
225 "accounting information"; few systems implement this.
Georg Brandl116aa622007-08-15 14:28:22 +0000226
227
228.. method:: FTP.abort()
229
230 Abort a file transfer that is in progress. Using this does not always work, but
231 it's worth a try.
232
233
Georg Brandl036490d2009-05-17 13:00:36 +0000234.. method:: FTP.sendcmd(cmd)
Georg Brandl116aa622007-08-15 14:28:22 +0000235
236 Send a simple command string to the server and return the response string.
237
238
Georg Brandl036490d2009-05-17 13:00:36 +0000239.. method:: FTP.voidcmd(cmd)
Georg Brandl116aa622007-08-15 14:28:22 +0000240
Georg Brandl392c92a2010-10-15 19:46:19 +0000241 Send a simple command string to the server and handle the response. Return
242 nothing if a response code corresponding to success (codes in the range
243 200--299) is received. Raise :exc:`error_reply` otherwise.
Georg Brandl116aa622007-08-15 14:28:22 +0000244
245
Georg Brandl036490d2009-05-17 13:00:36 +0000246.. method:: FTP.retrbinary(cmd, callback, blocksize=8192, rest=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000247
Georg Brandl036490d2009-05-17 13:00:36 +0000248 Retrieve a file in binary transfer mode. *cmd* should be an appropriate
Georg Brandl116aa622007-08-15 14:28:22 +0000249 ``RETR`` command: ``'RETR filename'``. The *callback* function is called for
250 each block of data received, with a single string argument giving the data
Georg Brandl036490d2009-05-17 13:00:36 +0000251 block. The optional *blocksize* argument specifies the maximum chunk size to
Georg Brandl116aa622007-08-15 14:28:22 +0000252 read on the low-level socket object created to do the actual transfer (which
253 will also be the largest size of the data blocks passed to *callback*). A
254 reasonable default is chosen. *rest* means the same thing as in the
255 :meth:`transfercmd` method.
256
257
Georg Brandl036490d2009-05-17 13:00:36 +0000258.. method:: FTP.retrlines(cmd, callback=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000259
Georg Brandl392c92a2010-10-15 19:46:19 +0000260 Retrieve a file or directory listing in ASCII transfer mode. *cmd* should be
261 an appropriate ``RETR`` command (see :meth:`retrbinary`) or a command such as
Giampaolo Rodola'd78def92011-05-06 19:49:08 +0200262 ``LIST`` or ``NLST`` (usually just the string ``'LIST'``).
Georg Brandl392c92a2010-10-15 19:46:19 +0000263 ``LIST`` retrieves a list of files and information about those files.
Giampaolo Rodola'd78def92011-05-06 19:49:08 +0200264 ``NLST`` retrieves a list of file names.
265 The *callback* function is called for each line with a string argument
266 containing the line with the trailing CRLF stripped. The default *callback*
267 prints the line to ``sys.stdout``.
Georg Brandl116aa622007-08-15 14:28:22 +0000268
269
270.. method:: FTP.set_pasv(boolean)
271
Georg Brandle6bcc912008-05-12 18:05:20 +0000272 Enable "passive" mode if *boolean* is true, other disable passive mode.
273 Passive mode is on by default.
Georg Brandl116aa622007-08-15 14:28:22 +0000274
275
Antoine Pitrou648bcd72009-11-27 13:23:26 +0000276.. method:: FTP.storbinary(cmd, file, blocksize=8192, callback=None, rest=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000277
Georg Brandl036490d2009-05-17 13:00:36 +0000278 Store a file in binary transfer mode. *cmd* should be an appropriate
Ezio Melotticbd449b2012-10-05 14:09:59 +0300279 ``STOR`` command: ``"STOR filename"``. *file* is a :term:`file object`
Serhiy Storchakabfdcd432013-10-13 23:09:14 +0300280 (opened in binary mode) which is read until EOF using its :meth:`~io.IOBase.read`
Ezio Melotticbd449b2012-10-05 14:09:59 +0300281 method in blocks of size *blocksize* to provide the data to be stored.
282 The *blocksize* argument defaults to 8192. *callback* is an optional single
283 parameter callable that is called on each block of data after it is sent.
284 *rest* means the same thing as in the :meth:`transfercmd` method.
Antoine Pitrou648bcd72009-11-27 13:23:26 +0000285
286 .. versionchanged:: 3.2
287 *rest* parameter added.
Georg Brandl116aa622007-08-15 14:28:22 +0000288
Georg Brandl116aa622007-08-15 14:28:22 +0000289
Georg Brandl036490d2009-05-17 13:00:36 +0000290.. method:: FTP.storlines(cmd, file, callback=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000291
Georg Brandl036490d2009-05-17 13:00:36 +0000292 Store a file in ASCII transfer mode. *cmd* should be an appropriate
Georg Brandl116aa622007-08-15 14:28:22 +0000293 ``STOR`` command (see :meth:`storbinary`). Lines are read until EOF from the
Serhiy Storchakabfdcd432013-10-13 23:09:14 +0300294 :term:`file object` *file* (opened in binary mode) using its :meth:`~io.IOBase.readline`
Ezio Melotticbd449b2012-10-05 14:09:59 +0300295 method to provide the data to be stored. *callback* is an optional single
296 parameter callable that is called on each line after it is sent.
Georg Brandl116aa622007-08-15 14:28:22 +0000297
298
Georg Brandl036490d2009-05-17 13:00:36 +0000299.. method:: FTP.transfercmd(cmd, rest=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000300
301 Initiate a transfer over the data connection. If the transfer is active, send a
302 ``EPRT`` or ``PORT`` command and the transfer command specified by *cmd*, and
303 accept the connection. If the server is passive, send a ``EPSV`` or ``PASV``
304 command, connect to it, and start the transfer command. Either way, return the
305 socket for the connection.
306
307 If optional *rest* is given, a ``REST`` command is sent to the server, passing
308 *rest* as an argument. *rest* is usually a byte offset into the requested file,
309 telling the server to restart sending the file's bytes at the requested offset,
310 skipping over the initial bytes. Note however that RFC 959 requires only that
311 *rest* be a string containing characters in the printable range from ASCII code
312 33 to ASCII code 126. The :meth:`transfercmd` method, therefore, converts
313 *rest* to a string, but no check is performed on the string's contents. If the
314 server does not recognize the ``REST`` command, an :exc:`error_reply` exception
315 will be raised. If this happens, simply call :meth:`transfercmd` without a
316 *rest* argument.
317
318
Georg Brandl036490d2009-05-17 13:00:36 +0000319.. method:: FTP.ntransfercmd(cmd, rest=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000320
321 Like :meth:`transfercmd`, but returns a tuple of the data connection and the
322 expected size of the data. If the expected size could not be computed, ``None``
323 will be returned as the expected size. *cmd* and *rest* means the same thing as
324 in :meth:`transfercmd`.
325
326
Giampaolo Rodola'd78def92011-05-06 19:49:08 +0200327.. method:: FTP.mlsd(path="", facts=[])
328
329 List a directory in a standardized format by using MLSD command
Giampaolo Rodola'a55efb32011-05-07 16:06:59 +0200330 (:rfc:`3659`). If *path* is omitted the current directory is assumed.
Giampaolo Rodola'd78def92011-05-06 19:49:08 +0200331 *facts* is a list of strings representing the type of information desired
Giampaolo Rodola'a55efb32011-05-07 16:06:59 +0200332 (e.g. ``["type", "size", "perm"]``). Return a generator object yielding a
333 tuple of two elements for every file found in path. First element is the
334 file name, the second one is a dictionary containing facts about the file
335 name. Content of this dictionary might be limited by the *facts* argument
336 but server is not guaranteed to return all requested facts.
Giampaolo Rodola'd78def92011-05-06 19:49:08 +0200337
338 .. versionadded:: 3.3
339
340
Georg Brandl116aa622007-08-15 14:28:22 +0000341.. method:: FTP.nlst(argument[, ...])
342
Georg Brandl392c92a2010-10-15 19:46:19 +0000343 Return a list of file names as returned by the ``NLST`` command. The
344 optional *argument* is a directory to list (default is the current server
345 directory). Multiple arguments can be used to pass non-standard options to
346 the ``NLST`` command.
Georg Brandl116aa622007-08-15 14:28:22 +0000347
Giampaolo Rodola'a55efb32011-05-07 16:06:59 +0200348 .. deprecated:: 3.3 use :meth:`mlsd` instead.
Giampaolo Rodola'd78def92011-05-06 19:49:08 +0200349
Georg Brandl116aa622007-08-15 14:28:22 +0000350
351.. method:: FTP.dir(argument[, ...])
352
353 Produce a directory listing as returned by the ``LIST`` command, printing it to
354 standard output. The optional *argument* is a directory to list (default is the
355 current server directory). Multiple arguments can be used to pass non-standard
356 options to the ``LIST`` command. If the last argument is a function, it is used
357 as a *callback* function as for :meth:`retrlines`; the default prints to
358 ``sys.stdout``. This method returns ``None``.
359
Giampaolo Rodola'a55efb32011-05-07 16:06:59 +0200360 .. deprecated:: 3.3 use :meth:`mlsd` instead.
Giampaolo Rodola'd78def92011-05-06 19:49:08 +0200361
Georg Brandl116aa622007-08-15 14:28:22 +0000362
363.. method:: FTP.rename(fromname, toname)
364
365 Rename file *fromname* on the server to *toname*.
366
367
368.. method:: FTP.delete(filename)
369
370 Remove the file named *filename* from the server. If successful, returns the
371 text of the response, otherwise raises :exc:`error_perm` on permission errors or
372 :exc:`error_reply` on other errors.
373
374
375.. method:: FTP.cwd(pathname)
376
377 Set the current directory on the server.
378
379
380.. method:: FTP.mkd(pathname)
381
382 Create a new directory on the server.
383
384
385.. method:: FTP.pwd()
386
387 Return the pathname of the current directory on the server.
388
389
390.. method:: FTP.rmd(dirname)
391
392 Remove the directory named *dirname* on the server.
393
394
395.. method:: FTP.size(filename)
396
397 Request the size of the file named *filename* on the server. On success, the
398 size of the file is returned as an integer, otherwise ``None`` is returned.
399 Note that the ``SIZE`` command is not standardized, but is supported by many
400 common server implementations.
401
402
403.. method:: FTP.quit()
404
405 Send a ``QUIT`` command to the server and close the connection. This is the
Benjamin Petersonf10a79a2008-10-11 00:49:57 +0000406 "polite" way to close a connection, but it may raise an exception if the server
Georg Brandl2ee470f2008-07-16 12:55:28 +0000407 responds with an error to the ``QUIT`` command. This implies a call to the
Georg Brandl116aa622007-08-15 14:28:22 +0000408 :meth:`close` method which renders the :class:`FTP` instance useless for
409 subsequent calls (see below).
410
411
412.. method:: FTP.close()
413
414 Close the connection unilaterally. This should not be applied to an already
Jesus Ceac73f8632012-12-26 16:47:03 +0100415 closed connection such as after a successful call to :meth:`~FTP.quit`.
416 After this call the :class:`FTP` instance should not be used any more (after
417 a call to :meth:`close` or :meth:`~FTP.quit` you cannot reopen the
418 connection by issuing another :meth:`login` method).
Georg Brandl116aa622007-08-15 14:28:22 +0000419
Antoine Pitrouf988cd02009-11-17 20:21:14 +0000420
421FTP_TLS Objects
422---------------
423
424:class:`FTP_TLS` class inherits from :class:`FTP`, defining these additional objects:
425
426.. attribute:: FTP_TLS.ssl_version
427
428 The SSL version to use (defaults to *TLSv1*).
429
430.. method:: FTP_TLS.auth()
431
Georg Brandl036e41d2013-10-06 18:17:56 +0200432 Set up secure control connection by using TLS or SSL, depending on what
433 specified in :meth:`ssl_version` attribute.
Antoine Pitrouf988cd02009-11-17 20:21:14 +0000434
Christian Heimese5b5edf2013-12-02 02:56:02 +0100435 .. versionchanged:: 3.4
436 The method now supports hostname check with
437 :attr:`SSLContext.check_hostname` and *Server Name Indicator* (see
438 :data:`~ssl.HAS_SNI`).
439
Giampaolo Rodola'096dcb12011-06-27 11:17:51 +0200440.. method:: FTP_TLS.ccc()
441
Florent Xicluna6d57d212011-10-23 22:23:57 +0200442 Revert control channel back to plaintext. This can be useful to take
Giampaolo Rodola'096dcb12011-06-27 11:17:51 +0200443 advantage of firewalls that know how to handle NAT with non-secure FTP
444 without opening fixed ports.
445
446 .. versionadded:: 3.3
447
Antoine Pitrouf988cd02009-11-17 20:21:14 +0000448.. method:: FTP_TLS.prot_p()
449
450 Set up secure data connection.
451
452.. method:: FTP_TLS.prot_c()
453
454 Set up clear text data connection.