blob: 9f279dfabc00cb3fe8d6d8bbaa95a168537a2ec8 [file] [log] [blame]
Moshe Zadka8a18e992001-03-01 08:40:42 +00001\section{\module{urllib2} ---
2 extensible library for opening URLs}
3
4\declaremodule{standard}{urllib2}
Moshe Zadka8a18e992001-03-01 08:40:42 +00005\moduleauthor{Jeremy Hylton}{jhylton@users.sourceforge.net}
6\sectionauthor{Moshe Zadka}{moshez@users.sourceforge.net}
7
8\modulesynopsis{An extensible library for opening URLs using a variety of
9 protocols}
10
11The \module{urllib2} module defines functions and classes which help
Fred Drake93c86712001-03-02 20:39:34 +000012in opening URLs (mostly HTTP) in a complex world --- basic and digest
Moshe Zadka8a18e992001-03-01 08:40:42 +000013authentication, redirections and more.
14
15The \module{urllib2} module defines the following functions:
16
17\begin{funcdesc}{urlopen}{url\optional{, data}}
Fred Drake399bc8c2001-11-09 03:49:29 +000018Open the URL \var{url}, which can be either a string or a \class{Request}
Moshe Zadka8a18e992001-03-01 08:40:42 +000019object (currently the code checks that it really is a \class{Request}
Fred Drake93c86712001-03-02 20:39:34 +000020instance, or an instance of a subclass of \class{Request}).
Moshe Zadka8a18e992001-03-01 08:40:42 +000021
22\var{data} should be a string, which specifies additional data to
23send to the server. In HTTP requests, which are the only ones that
24support \var{data}, it should be a buffer in the format of
Fred Drake93c86712001-03-02 20:39:34 +000025\mimetype{application/x-www-form-urlencoded}, for example one returned
26from \function{urllib.urlencode()}.
Moshe Zadka8a18e992001-03-01 08:40:42 +000027
28This function returns a file-like object with two additional methods:
29
30\begin{itemize}
Fred Drake93c86712001-03-02 20:39:34 +000031 \item \method{geturl()} --- return the URL of the resource retrieved
32 \item \method{info()} --- return the meta-information of the page, as
33 a dictionary-like object
Moshe Zadka8a18e992001-03-01 08:40:42 +000034\end{itemize}
35
36Raises \exception{URLError} on errors.
37\end{funcdesc}
38
39\begin{funcdesc}{install_opener}{opener}
Fred Drake399bc8c2001-11-09 03:49:29 +000040Install an \class{OpenerDirector} instance as the default opener.
Moshe Zadka8a18e992001-03-01 08:40:42 +000041The code does not check for a real \class{OpenerDirector}, and any
42class with the appropriate interface will work.
43\end{funcdesc}
44
Fred Drake93c86712001-03-02 20:39:34 +000045\begin{funcdesc}{build_opener}{\optional{handler, \moreargs}}
Moshe Zadka8a18e992001-03-01 08:40:42 +000046Return an \class{OpenerDirector} instance, which chains the
47handlers in the order given. \var{handler}s can be either instances
48of \class{BaseHandler}, or subclasses of \class{BaseHandler} (in
49which case it must be possible to call the constructor without
Fred Drake399bc8c2001-11-09 03:49:29 +000050any parameters). Instances of the following classes will be in
51front of the \var{handler}s, unless the \var{handler}s contain
Moshe Zadka8a18e992001-03-01 08:40:42 +000052them, instances of them or subclasses of them:
53
54\code{ProxyHandler, UnknownHandler, HTTPHandler, HTTPDefaultErrorHandler,
55 HTTPRedirectHandler, FTPHandler, FileHandler}
56
Fred Drake93c86712001-03-02 20:39:34 +000057If the Python installation has SSL support (\function{socket.ssl()}
58exists), \class{HTTPSHandler} will also be added.
Moshe Zadka8a18e992001-03-01 08:40:42 +000059\end{funcdesc}
60
Fred Drake93c86712001-03-02 20:39:34 +000061
62The following exceptions are raised as appropriate:
63
Moshe Zadka8a18e992001-03-01 08:40:42 +000064\begin{excdesc}{URLError}
Fred Drake399bc8c2001-11-09 03:49:29 +000065The handlers raise this exception (or derived exceptions) when they
66run into a problem. It is a subclass of \exception{IOError}.
Moshe Zadka8a18e992001-03-01 08:40:42 +000067\end{excdesc}
68
69\begin{excdesc}{HTTPError}
70A subclass of \exception{URLError}, it can also function as a
Fred Drake93c86712001-03-02 20:39:34 +000071non-exceptional file-like return value (the same thing that
72\function{urlopen()} returns). This is useful when handling exotic
73HTTP errors, such as requests for authentication.
Moshe Zadka8a18e992001-03-01 08:40:42 +000074\end{excdesc}
75
76\begin{excdesc}{GopherError}
77A subclass of \exception{URLError}, this is the error raised by the
78Gopher handler.
79\end{excdesc}
80
Fred Drake93c86712001-03-02 20:39:34 +000081
82The following classes are provided:
83
84\begin{classdesc}{Request}{url\optional{, data\optional{, headers}}}
Moshe Zadka8a18e992001-03-01 08:40:42 +000085This class is an abstraction of a URL request.
86
Fred Drake399bc8c2001-11-09 03:49:29 +000087\var{url} should be a string which is a valid URL. For a description
Fred Drake93c86712001-03-02 20:39:34 +000088of \var{data} see the \method{add_data()} description.
Moshe Zadka8a18e992001-03-01 08:40:42 +000089\var{headers} should be a dictionary, and will be treated as if
Fred Drake93c86712001-03-02 20:39:34 +000090\method{add_header()} was called with each key and value as arguments.
Moshe Zadka8a18e992001-03-01 08:40:42 +000091\end{classdesc}
92
Fred Drake93c86712001-03-02 20:39:34 +000093\begin{classdesc}{OpenerDirector}{}
94The \class{OpenerDirector} class opens URLs via \class{BaseHandler}s
95chained together. It manages the chaining of handlers, and recovery
96from errors.
97\end{classdesc}
98
99\begin{classdesc}{BaseHandler}{}
100This is the base class for all registered handlers --- and handles only
101the simple mechanics of registration.
102\end{classdesc}
103
104\begin{classdesc}{HTTPDefaultErrorHandler}{}
105A class which defines a default handler for HTTP error responses; all
106responses are turned into \exception{HTTPError} exceptions.
107\end{classdesc}
108
109\begin{classdesc}{HTTPRedirectHandler}{}
110A class to handle redirections.
111\end{classdesc}
112
113\begin{classdesc}{ProxyHandler}{\optional{proxies}}
114Cause requests to go through a proxy.
115If \var{proxies} is given, it must be a dictionary mapping
116protocol names to URLs of proxies.
117The default is to read the list of proxies from the environment
Fred Drake47852462001-05-11 15:46:45 +0000118variables \var{protocol}_proxy.
Fred Drake93c86712001-03-02 20:39:34 +0000119\end{classdesc}
120
121\begin{classdesc}{HTTPPasswordMgr}{}
122Keep a database of
123\code{(\var{realm}, \var{uri}) -> (\var{user}, \var{password})}
124mappings.
125\end{classdesc}
126
127\begin{classdesc}{HTTPPasswordMgrWithDefaultRealm}{}
128Keep a database of
129\code{(\var{realm}, \var{uri}) -> (\var{user}, \var{password})} mappings.
130A realm of \code{None} is considered a catch-all realm, which is searched
131if no other realm fits.
132\end{classdesc}
133
134\begin{classdesc}{AbstractBasicAuthHandler}{\optional{password_mgr}}
135This is a mixin class that helps with HTTP authentication, both
136to the remote host and to a proxy.
Fred Drake399bc8c2001-11-09 03:49:29 +0000137\var{password_mgr}, if given, should be something that is compatible
138with \class{HTTPPasswordMgr}; refer to section~\ref{http-password-mgr}
139for information on the interface that must be supported.
Fred Drake93c86712001-03-02 20:39:34 +0000140\end{classdesc}
141
142\begin{classdesc}{HTTPBasicAuthHandler}{\optional{password_mgr}}
143Handle authentication with the remote host.
Fred Drake399bc8c2001-11-09 03:49:29 +0000144\var{password_mgr}, if given, should be something that is compatible
145with \class{HTTPPasswordMgr}; refer to section~\ref{http-password-mgr}
146for information on the interface that must be supported.
Fred Drake93c86712001-03-02 20:39:34 +0000147\end{classdesc}
148
149\begin{classdesc}{ProxyBasicAuthHandler}{\optional{password_mgr}}
150Handle authentication with the proxy.
Fred Drake399bc8c2001-11-09 03:49:29 +0000151\var{password_mgr}, if given, should be something that is compatible
152with \class{HTTPPasswordMgr}; refer to section~\ref{http-password-mgr}
153for information on the interface that must be supported.
Fred Drake93c86712001-03-02 20:39:34 +0000154\end{classdesc}
155
156\begin{classdesc}{AbstractDigestAuthHandler}{\optional{password_mgr}}
Fred Drake399bc8c2001-11-09 03:49:29 +0000157This is a mixin class that helps with HTTP authentication, both
Fred Drake93c86712001-03-02 20:39:34 +0000158to the remote host and to a proxy.
Fred Drake399bc8c2001-11-09 03:49:29 +0000159\var{password_mgr}, if given, should be something that is compatible
160with \class{HTTPPasswordMgr}; refer to section~\ref{http-password-mgr}
161for information on the interface that must be supported.
Fred Drake93c86712001-03-02 20:39:34 +0000162\end{classdesc}
163
164\begin{classdesc}{HTTPDigestAuthHandler}{\optional{password_mgr}}
165Handle authentication with the remote host.
Fred Drake399bc8c2001-11-09 03:49:29 +0000166\var{password_mgr}, if given, should be something that is compatible
167with \class{HTTPPasswordMgr}; refer to section~\ref{http-password-mgr}
168for information on the interface that must be supported.
Fred Drake93c86712001-03-02 20:39:34 +0000169\end{classdesc}
170
171\begin{classdesc}{ProxyDigestAuthHandler}{\optional{password_mgr}}
172Handle authentication with the proxy.
Fred Drake399bc8c2001-11-09 03:49:29 +0000173\var{password_mgr}, if given, should be something that is compatible
174with \class{HTTPPasswordMgr}; refer to section~\ref{http-password-mgr}
175for information on the interface that must be supported.
Fred Drake93c86712001-03-02 20:39:34 +0000176\end{classdesc}
177
178\begin{classdesc}{HTTPHandler}{}
179A class to handle opening of HTTP URLs.
180\end{classdesc}
181
182\begin{classdesc}{HTTPSHandler}{}
183A class to handle opening of HTTPS URLs.
184\end{classdesc}
185
186\begin{classdesc}{FileHandler}{}
187Open local files.
188\end{classdesc}
189
190\begin{classdesc}{FTPHandler}{}
191Open FTP URLs.
192\end{classdesc}
193
194\begin{classdesc}{CacheFTPHandler}{}
195Open FTP URLs, keeping a cache of open FTP connections to minimize
196delays.
197\end{classdesc}
198
199\begin{classdesc}{GopherHandler}{}
200Open gopher URLs.
201\end{classdesc}
202
203\begin{classdesc}{UnknownHandler}{}
204A catch-all class to handle unknown URLs.
205\end{classdesc}
206
207
208\subsection{Request Objects \label{request-objects}}
209
Moshe Zadka8a18e992001-03-01 08:40:42 +0000210The following methods describe all of \class{Request}'s public interface,
211and so all must be overridden in subclasses.
212
213\begin{methoddesc}[Request]{add_data}{data}
Fred Drake399bc8c2001-11-09 03:49:29 +0000214Set the \class{Request} data to \var{data}. This is ignored
Moshe Zadka8a18e992001-03-01 08:40:42 +0000215by all handlers except HTTP handlers --- and there it should be an
Fred Drake93c86712001-03-02 20:39:34 +0000216\mimetype{application/x-www-form-encoded} buffer, and will change the
Fred Drake399bc8c2001-11-09 03:49:29 +0000217request to be \code{POST} rather than \code{GET}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000218\end{methoddesc}
219
Raymond Hettinger024aaa12003-04-24 15:32:12 +0000220\begin{methoddesc}[Request]{get_method}{}
221Return a string indicating the HTTP request method. This is only
222meaningful for HTTP requests, and currently always takes one of the
223values ("GET", "POST").
224\end{methoddesc}
225
Fred Drake399bc8c2001-11-09 03:49:29 +0000226\begin{methoddesc}[Request]{has_data}{}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000227Return whether the instance has a non-\code{None} data.
228\end{methoddesc}
229
Fred Drake399bc8c2001-11-09 03:49:29 +0000230\begin{methoddesc}[Request]{get_data}{}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000231Return the instance's data.
232\end{methoddesc}
233
234\begin{methoddesc}[Request]{add_header}{key, val}
Fred Drake93c86712001-03-02 20:39:34 +0000235Add another header to the request. Headers are currently ignored by
236all handlers except HTTP handlers, where they are added to the list
Fred Drake399bc8c2001-11-09 03:49:29 +0000237of headers sent to the server. Note that there cannot be more than
Fred Drake93c86712001-03-02 20:39:34 +0000238one header with the same name, and later calls will overwrite
239previous calls in case the \var{key} collides. Currently, this is
240no loss of HTTP functionality, since all headers which have meaning
Fred Drake399bc8c2001-11-09 03:49:29 +0000241when used more than once have a (header-specific) way of gaining the
Moshe Zadka8a18e992001-03-01 08:40:42 +0000242same functionality using only one header.
243\end{methoddesc}
244
245\begin{methoddesc}[Request]{get_full_url}{}
246Return the URL given in the constructor.
247\end{methoddesc}
248
249\begin{methoddesc}[Request]{get_type}{}
Fred Drake93c86712001-03-02 20:39:34 +0000250Return the type of the URL --- also known as the scheme.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000251\end{methoddesc}
252
253\begin{methoddesc}[Request]{get_host}{}
Fred Drake399bc8c2001-11-09 03:49:29 +0000254Return the host to which a connection will be made.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000255\end{methoddesc}
256
257\begin{methoddesc}[Request]{get_selector}{}
258Return the selector --- the part of the URL that is sent to
259the server.
260\end{methoddesc}
261
262\begin{methoddesc}[Request]{set_proxy}{host, type}
Fred Drake399bc8c2001-11-09 03:49:29 +0000263Prepare the request by connecting to a proxy server. The \var{host}
264and \var{type} will replace those of the instance, and the instance's
Fred Drake93c86712001-03-02 20:39:34 +0000265selector will be the original URL given in the constructor.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000266\end{methoddesc}
267
Fred Drake93c86712001-03-02 20:39:34 +0000268
269\subsection{OpenerDirector Objects \label{opener-director-objects}}
270
271\class{OpenerDirector} instances have the following methods:
Moshe Zadka8a18e992001-03-01 08:40:42 +0000272
273\begin{methoddesc}[OpenerDirector]{add_handler}{handler}
Fred Drake93c86712001-03-02 20:39:34 +0000274\var{handler} should be an instance of \class{BaseHandler}. The
275following methods are searched, and added to the possible chains.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000276
277\begin{itemize}
Fred Drake93c86712001-03-02 20:39:34 +0000278 \item \method{\var{protocol}_open()} ---
279 signal that the handler knows how to open \var{protocol} URLs.
280 \item \method{\var{protocol}_error_\var{type}()} ---
281 signal that the handler knows how to handle \var{type} errors from
282 \var{protocol}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000283\end{itemize}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000284\end{methoddesc}
285
286\begin{methoddesc}[OpenerDirector]{close}{}
287Explicitly break cycles, and delete all the handlers.
288Because the \class{OpenerDirector} needs to know the registered handlers,
289and a handler needs to know who the \class{OpenerDirector} who called
Fred Drake399bc8c2001-11-09 03:49:29 +0000290it is, there is a reference cycle. Even though recent versions of Python
Moshe Zadka8a18e992001-03-01 08:40:42 +0000291have cycle-collection, it is sometimes preferable to explicitly break
292the cycles.
293\end{methoddesc}
294
295\begin{methoddesc}[OpenerDirector]{open}{url\optional{, data}}
Fred Drake399bc8c2001-11-09 03:49:29 +0000296Open the given \var{url} (which can be a request object or a string),
Moshe Zadka8a18e992001-03-01 08:40:42 +0000297optionally passing the given \var{data}.
298Arguments, return values and exceptions raised are the same as those
Fred Drake93c86712001-03-02 20:39:34 +0000299of \function{urlopen()} (which simply calls the \method{open()} method
Moshe Zadka8a18e992001-03-01 08:40:42 +0000300on the default installed \class{OpenerDirector}.
301\end{methoddesc}
302
Fred Drake93c86712001-03-02 20:39:34 +0000303\begin{methoddesc}[OpenerDirector]{error}{proto\optional{,
304 arg\optional{, \moreargs}}}
Fred Drake399bc8c2001-11-09 03:49:29 +0000305Handle an error in a given protocol. This will call the registered
306error handlers for the given protocol with the given arguments (which
307are protocol specific). The HTTP protocol is a special case which
308uses the HTTP response code to determine the specific error handler;
309refer to the \method{http_error_*()} methods of the handler classes.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000310
311Return values and exceptions raised are the same as those
Fred Drake93c86712001-03-02 20:39:34 +0000312of \function{urlopen()}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000313\end{methoddesc}
314
Fred Drake93c86712001-03-02 20:39:34 +0000315
316\subsection{BaseHandler Objects \label{base-handler-objects}}
317
318\class{BaseHandler} objects provide a couple of methods that are
319directly useful, and others that are meant to be used by derived
320classes. These are intended for direct use:
Moshe Zadka8a18e992001-03-01 08:40:42 +0000321
322\begin{methoddesc}[BaseHandler]{add_parent}{director}
323Add a director as parent.
324\end{methoddesc}
325
326\begin{methoddesc}[BaseHandler]{close}{}
327Remove any parents.
328\end{methoddesc}
329
Fred Drake399bc8c2001-11-09 03:49:29 +0000330The following members and methods should only be used by classes
Fred Drake93c86712001-03-02 20:39:34 +0000331derived from \class{BaseHandler}:
Moshe Zadka8a18e992001-03-01 08:40:42 +0000332
333\begin{memberdesc}[BaseHandler]{parent}
Fred Drake93c86712001-03-02 20:39:34 +0000334A valid \class{OpenerDirector}, which can be used to open using a
335different protocol, or handle errors.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000336\end{memberdesc}
337
338\begin{methoddesc}[BaseHandler]{default_open}{req}
Fred Drake93c86712001-03-02 20:39:34 +0000339This method is \emph{not} defined in \class{BaseHandler}, but
340subclasses should define it if they want to catch all URLs.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000341
Fred Drake399bc8c2001-11-09 03:49:29 +0000342This method, if implemented, will be called by the parent
Fred Drake93c86712001-03-02 20:39:34 +0000343\class{OpenerDirector}. It should return a file-like object as
344described in the return value of the \method{open()} of
Fred Drake399bc8c2001-11-09 03:49:29 +0000345\class{OpenerDirector}, or \code{None}. It should raise
Fred Drake93c86712001-03-02 20:39:34 +0000346\exception{URLError}, unless a truly exceptional thing happens (for
347example, \exception{MemoryError} should not be mapped to
Fred Drake399bc8c2001-11-09 03:49:29 +0000348\exception{URLError}).
Moshe Zadka8a18e992001-03-01 08:40:42 +0000349
350This method will be called before any protocol-specific open method.
351\end{methoddesc}
352
Fred Drake47852462001-05-11 15:46:45 +0000353\begin{methoddescni}[BaseHandler]{\var{protocol}_open}{req}
Fred Drake93c86712001-03-02 20:39:34 +0000354This method is \emph{not} defined in \class{BaseHandler}, but
355subclasses should define it if they want to handle URLs with the given
356protocol.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000357
Fred Drake399bc8c2001-11-09 03:49:29 +0000358This method, if defined, will be called by the parent
Fred Drake93c86712001-03-02 20:39:34 +0000359\class{OpenerDirector}. Return values should be the same as for
360\method{default_open()}.
Fred Drake47852462001-05-11 15:46:45 +0000361\end{methoddescni}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000362
363\begin{methoddesc}[BaseHandler]{unknown_open}{req}
Fred Drake93c86712001-03-02 20:39:34 +0000364This method is \var{not} defined in \class{BaseHandler}, but
365subclasses should define it if they want to catch all URLs with no
Fred Drake399bc8c2001-11-09 03:49:29 +0000366specific registered handler to open it.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000367
Fred Drake399bc8c2001-11-09 03:49:29 +0000368This method, if implemented, will be called by the \member{parent}
Fred Drake93c86712001-03-02 20:39:34 +0000369\class{OpenerDirector}. Return values should be the same as for
370\method{default_open()}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000371\end{methoddesc}
372
373\begin{methoddesc}[BaseHandler]{http_error_default}{req, fp, code, msg, hdrs}
Fred Drake93c86712001-03-02 20:39:34 +0000374This method is \emph{not} defined in \class{BaseHandler}, but
375subclasses should override it if they intend to provide a catch-all
376for otherwise unhandled HTTP errors. It will be called automatically
377by the \class{OpenerDirector} getting the error, and should not
378normally be called in other circumstances.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000379
Fred Drake93c86712001-03-02 20:39:34 +0000380\var{req} will be a \class{Request} object, \var{fp} will be a
381file-like object with the HTTP error body, \var{code} will be the
382three-digit code of the error, \var{msg} will be the user-visible
383explanation of the code and \var{hdrs} will be a mapping object with
384the headers of the error.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000385
386Return values and exceptions raised should be the same as those
Fred Drake93c86712001-03-02 20:39:34 +0000387of \function{urlopen()}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000388\end{methoddesc}
389
Fred Drake93c86712001-03-02 20:39:34 +0000390\begin{methoddesc}[BaseHandler]{http_error_\var{nnn}}{req, fp, code, msg, hdrs}
391\var{nnn} should be a three-digit HTTP error code. This method is
392also not defined in \class{BaseHandler}, but will be called, if it
393exists, on an instance of a subclass, when an HTTP error with code
394\var{nnn} occurs.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000395
Fred Drake93c86712001-03-02 20:39:34 +0000396Subclasses should override this method to handle specific HTTP
397errors.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000398
Fred Drake93c86712001-03-02 20:39:34 +0000399Arguments, return values and exceptions raised should be the same as
400for \method{http_error_default()}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000401\end{methoddesc}
402
Fred Drake93c86712001-03-02 20:39:34 +0000403\subsection{HTTPRedirectHandler Objects \label{http-redirect-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000404
Raymond Hettinger024aaa12003-04-24 15:32:12 +0000405\note{Some HTTP redirections require action from this module's client
406 code. If this is the case, \exception{HTTPError} is raised. See
407 \rfc{2616} for details of the precise meanings of the various
408 redirection codes.}
409
410\begin{methoddesc}[HTTPRedirectHandler]{redirect_request}{req,
411 fp, code, msg, hdrs}
412Return a \class{Request} or \code{None} in response to a redirect.
413This is called by the default implementations of the
414\code{http_error_30x()} methods when a redirection is received from
415the server. If a redirection should take place, return a new
416\class{Request} to allow \code{http_error_30x()} to perform the
417redirect. Otherwise, raise \exception{HTTPError} if no other
418\class{Handler} should try to handle this URL, or return \code{None}
419if you can't but another \class{Handler} might.
420
421\note{The default implementation of this method does not strictly
422 follow \rfc{2616}: it allows automatic 302 redirection of POST
423 requests, because essentially all HTTP clients do this.}
424
425\end{methoddesc}
426
Moshe Zadka8a18e992001-03-01 08:40:42 +0000427
Fred Drake93c86712001-03-02 20:39:34 +0000428\begin{methoddesc}[HTTPRedirectHandler]{http_error_301}{req,
429 fp, code, msg, hdrs}
430Redirect to the \code{Location:} URL. This method is called by
431the parent \class{OpenerDirector} when getting an HTTP
Raymond Hettinger024aaa12003-04-24 15:32:12 +0000432`moved permanently' response.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000433\end{methoddesc}
434
Fred Drake93c86712001-03-02 20:39:34 +0000435\begin{methoddesc}[HTTPRedirectHandler]{http_error_302}{req,
436 fp, code, msg, hdrs}
437The same as \method{http_error_301()}, but called for the
Raymond Hettinger024aaa12003-04-24 15:32:12 +0000438`found' response.
Fred Drake93c86712001-03-02 20:39:34 +0000439\end{methoddesc}
440
Raymond Hettinger024aaa12003-04-24 15:32:12 +0000441\begin{methoddesc}[HTTPRedirectHandler]{http_error_303}{req,
442 fp, code, msg, hdrs}
443The same as \method{http_error_301()}, but called for the
444`see other' redirect response.
445\end{methoddesc}
Fred Drake93c86712001-03-02 20:39:34 +0000446
447\subsection{ProxyHandler Objects \label{proxy-handler}}
448
Fred Drake47852462001-05-11 15:46:45 +0000449\begin{methoddescni}[ProxyHandler]{\var{protocol}_open}{request}
Fred Drake93c86712001-03-02 20:39:34 +0000450The \class{ProxyHandler} will have a method
451\method{\var{protocol}_open()} for every \var{protocol} which has a
452proxy in the \var{proxies} dictionary given in the constructor. The
453method will modify requests to go through the proxy, by calling
454\code{request.set_proxy()}, and call the next handler in the chain to
455actually execute the protocol.
Fred Drake47852462001-05-11 15:46:45 +0000456\end{methoddescni}
Fred Drake93c86712001-03-02 20:39:34 +0000457
458
459\subsection{HTTPPasswordMgr Objects \label{http-password-mgr}}
460
461These methods are available on \class{HTTPPasswordMgr} and
462\class{HTTPPasswordMgrWithDefaultRealm} objects.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000463
464\begin{methoddesc}[HTTPPasswordMgr]{add_password}{realm, uri, user, passwd}
465\var{uri} can be either a single URI, or a sequene of URIs. \var{realm},
466\var{user} and \var{passwd} must be strings. This causes
Fred Drake93c86712001-03-02 20:39:34 +0000467\code{(\var{user}, \var{passwd})} to be used as authentication tokens
Moshe Zadka8a18e992001-03-01 08:40:42 +0000468when authentication for \var{realm} and a super-URI of any of the
469given URIs is given.
470\end{methoddesc}
471
472\begin{methoddesc}[HTTPPasswordMgr]{find_user_password}{realm, authuri}
Fred Drake93c86712001-03-02 20:39:34 +0000473Get user/password for given realm and URI, if any. This method will
474return \code{(None, None)} if there is no matching user/password.
475
476For \class{HTTPPasswordMgrWithDefaultRealm} objects, the realm
477\code{None} will be searched if the given \var{realm} has no matching
478user/password.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000479\end{methoddesc}
480
Moshe Zadka8a18e992001-03-01 08:40:42 +0000481
Fred Drake93c86712001-03-02 20:39:34 +0000482\subsection{AbstractBasicAuthHandler Objects
483 \label{abstract-basic-auth-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000484
485\begin{methoddesc}[AbstractBasicAuthHandler]{handle_authentication_request}
486 {authreq, host, req, headers}
Fred Drake399bc8c2001-11-09 03:49:29 +0000487Handle an authentication request by getting a user/password pair, and
488re-trying the request. \var{authreq} should be the name of the header
489where the information about the realm is included in the request,
490\var{host} is the host to authenticate to, \var{req} should be the
491(failed) \class{Request} object, and \var{headers} should be the error
492headers.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000493\end{methoddesc}
494
Fred Drake93c86712001-03-02 20:39:34 +0000495
496\subsection{HTTPBasicAuthHandler Objects
497 \label{http-basic-auth-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000498
499\begin{methoddesc}[HTTPBasicAuthHandler]{http_error_401}{req, fp, code,
500 msg, hdrs}
Fred Drake399bc8c2001-11-09 03:49:29 +0000501Retry the request with authentication information, if available.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000502\end{methoddesc}
503
Fred Drake93c86712001-03-02 20:39:34 +0000504
505\subsection{ProxyBasicAuthHandler Objects
506 \label{proxy-basic-auth-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000507
508\begin{methoddesc}[ProxyBasicAuthHandler]{http_error_407}{req, fp, code,
509 msg, hdrs}
Fred Drake399bc8c2001-11-09 03:49:29 +0000510Retry the request with authentication information, if available.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000511\end{methoddesc}
512
Moshe Zadka8a18e992001-03-01 08:40:42 +0000513
Fred Drake93c86712001-03-02 20:39:34 +0000514\subsection{AbstractDigestAuthHandler Objects
515 \label{abstract-digest-auth-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000516
Fred Drake93c86712001-03-02 20:39:34 +0000517\begin{methoddesc}[AbstractDigestAuthHandler]{handle_authentication_request}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000518 {authreq, host, req, headers}
519\var{authreq} should be the name of the header where the information about
Fred Drake399bc8c2001-11-09 03:49:29 +0000520the realm is included in the request, \var{host} should be the host to
521authenticate to, \var{req} should be the (failed) \class{Request}
522object, and \var{headers} should be the error headers.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000523\end{methoddesc}
524
Fred Drake93c86712001-03-02 20:39:34 +0000525
526\subsection{HTTPDigestAuthHandler Objects
527 \label{http-digest-auth-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000528
529\begin{methoddesc}[HTTPDigestAuthHandler]{http_error_401}{req, fp, code,
530 msg, hdrs}
Fred Drake399bc8c2001-11-09 03:49:29 +0000531Retry the request with authentication information, if available.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000532\end{methoddesc}
533
Fred Drake93c86712001-03-02 20:39:34 +0000534
535\subsection{ProxyDigestAuthHandler Objects
536 \label{proxy-digest-auth-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000537
538\begin{methoddesc}[ProxyDigestAuthHandler]{http_error_407}{req, fp, code,
539 msg, hdrs}
Fred Drake93c86712001-03-02 20:39:34 +0000540Retry the request with authentication information, if available.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000541\end{methoddesc}
542
Fred Drake93c86712001-03-02 20:39:34 +0000543
544\subsection{HTTPHandler Objects \label{http-handler-objects}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000545
546\begin{methoddesc}[HTTPHandler]{http_open}{req}
Fred Drake399bc8c2001-11-09 03:49:29 +0000547Send an HTTP request, which can be either GET or POST, depending on
Fred Drake93c86712001-03-02 20:39:34 +0000548\code{\var{req}.has_data()}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000549\end{methoddesc}
550
Fred Drake93c86712001-03-02 20:39:34 +0000551
552\subsection{HTTPSHandler Objects \label{https-handler-objects}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000553
554\begin{methoddesc}[HTTPSHandler]{https_open}{req}
Fred Drake93c86712001-03-02 20:39:34 +0000555Send an HTTPS request, which can be either GET or POST, depending on
556\code{\var{req}.has_data()}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000557\end{methoddesc}
558
Moshe Zadka8a18e992001-03-01 08:40:42 +0000559
Fred Drake93c86712001-03-02 20:39:34 +0000560\subsection{FileHandler Objects \label{file-handler-objects}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000561
562\begin{methoddesc}[FileHandler]{file_open}{req}
563Open the file locally, if there is no host name, or
Fred Drake93c86712001-03-02 20:39:34 +0000564the host name is \code{'localhost'}. Change the
Moshe Zadka8a18e992001-03-01 08:40:42 +0000565protocol to \code{ftp} otherwise, and retry opening
566it using \member{parent}.
567\end{methoddesc}
568
Fred Drake93c86712001-03-02 20:39:34 +0000569
570\subsection{FTPHandler Objects \label{ftp-handler-objects}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000571
572\begin{methoddesc}[FTPHandler]{ftp_open}{req}
573Open the FTP file indicated by \var{req}.
574The login is always done with empty username and password.
575\end{methoddesc}
576
Moshe Zadka8a18e992001-03-01 08:40:42 +0000577
Fred Drake93c86712001-03-02 20:39:34 +0000578\subsection{CacheFTPHandler Objects \label{cacheftp-handler-objects}}
579
580\class{CacheFTPHandler} objects are \class{FTPHandler} objects with
581the following additional methods:
Moshe Zadka8a18e992001-03-01 08:40:42 +0000582
583\begin{methoddesc}[CacheFTPHandler]{setTimeout}{t}
584Set timeout of connections to \var{t} seconds.
585\end{methoddesc}
586
587\begin{methoddesc}[CacheFTPHandler]{setMaxConns}{m}
588Set maximum number of cached connections to \var{m}.
589\end{methoddesc}
590
Fred Drake93c86712001-03-02 20:39:34 +0000591
592\subsection{GopherHandler Objects \label{gopher-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000593
594\begin{methoddesc}[GopherHandler]{gopher_open}{req}
595Open the gopher resource indicated by \var{req}.
596\end{methoddesc}
Fred Drake93c86712001-03-02 20:39:34 +0000597
598
599\subsection{UnknownHandler Objects \label{unknown-handler-objects}}
600
Fred Drakea9399112001-07-05 21:14:03 +0000601\begin{methoddesc}[UnknownHandler]{unknown_open}{}
Fred Drake93c86712001-03-02 20:39:34 +0000602Raise a \exception{URLError} exception.
603\end{methoddesc}