blob: 02a3cc3795ac02997dd41ec1890e87e28866dc75 [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
Fred Drake399bc8c2001-11-09 03:49:29 +0000220\begin{methoddesc}[Request]{has_data}{}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000221Return whether the instance has a non-\code{None} data.
222\end{methoddesc}
223
Fred Drake399bc8c2001-11-09 03:49:29 +0000224\begin{methoddesc}[Request]{get_data}{}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000225Return the instance's data.
226\end{methoddesc}
227
228\begin{methoddesc}[Request]{add_header}{key, val}
Fred Drake93c86712001-03-02 20:39:34 +0000229Add another header to the request. Headers are currently ignored by
230all handlers except HTTP handlers, where they are added to the list
Fred Drake399bc8c2001-11-09 03:49:29 +0000231of headers sent to the server. Note that there cannot be more than
Fred Drake93c86712001-03-02 20:39:34 +0000232one header with the same name, and later calls will overwrite
233previous calls in case the \var{key} collides. Currently, this is
234no loss of HTTP functionality, since all headers which have meaning
Fred Drake399bc8c2001-11-09 03:49:29 +0000235when used more than once have a (header-specific) way of gaining the
Moshe Zadka8a18e992001-03-01 08:40:42 +0000236same functionality using only one header.
237\end{methoddesc}
238
239\begin{methoddesc}[Request]{get_full_url}{}
240Return the URL given in the constructor.
241\end{methoddesc}
242
243\begin{methoddesc}[Request]{get_type}{}
Fred Drake93c86712001-03-02 20:39:34 +0000244Return the type of the URL --- also known as the scheme.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000245\end{methoddesc}
246
247\begin{methoddesc}[Request]{get_host}{}
Fred Drake399bc8c2001-11-09 03:49:29 +0000248Return the host to which a connection will be made.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000249\end{methoddesc}
250
251\begin{methoddesc}[Request]{get_selector}{}
252Return the selector --- the part of the URL that is sent to
253the server.
254\end{methoddesc}
255
256\begin{methoddesc}[Request]{set_proxy}{host, type}
Fred Drake399bc8c2001-11-09 03:49:29 +0000257Prepare the request by connecting to a proxy server. The \var{host}
258and \var{type} will replace those of the instance, and the instance's
Fred Drake93c86712001-03-02 20:39:34 +0000259selector will be the original URL given in the constructor.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000260\end{methoddesc}
261
Fred Drake93c86712001-03-02 20:39:34 +0000262
263\subsection{OpenerDirector Objects \label{opener-director-objects}}
264
265\class{OpenerDirector} instances have the following methods:
Moshe Zadka8a18e992001-03-01 08:40:42 +0000266
267\begin{methoddesc}[OpenerDirector]{add_handler}{handler}
Fred Drake93c86712001-03-02 20:39:34 +0000268\var{handler} should be an instance of \class{BaseHandler}. The
269following methods are searched, and added to the possible chains.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000270
271\begin{itemize}
Fred Drake93c86712001-03-02 20:39:34 +0000272 \item \method{\var{protocol}_open()} ---
273 signal that the handler knows how to open \var{protocol} URLs.
274 \item \method{\var{protocol}_error_\var{type}()} ---
275 signal that the handler knows how to handle \var{type} errors from
276 \var{protocol}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000277\end{itemize}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000278\end{methoddesc}
279
280\begin{methoddesc}[OpenerDirector]{close}{}
281Explicitly break cycles, and delete all the handlers.
282Because the \class{OpenerDirector} needs to know the registered handlers,
283and a handler needs to know who the \class{OpenerDirector} who called
Fred Drake399bc8c2001-11-09 03:49:29 +0000284it is, there is a reference cycle. Even though recent versions of Python
Moshe Zadka8a18e992001-03-01 08:40:42 +0000285have cycle-collection, it is sometimes preferable to explicitly break
286the cycles.
287\end{methoddesc}
288
289\begin{methoddesc}[OpenerDirector]{open}{url\optional{, data}}
Fred Drake399bc8c2001-11-09 03:49:29 +0000290Open the given \var{url} (which can be a request object or a string),
Moshe Zadka8a18e992001-03-01 08:40:42 +0000291optionally passing the given \var{data}.
292Arguments, return values and exceptions raised are the same as those
Fred Drake93c86712001-03-02 20:39:34 +0000293of \function{urlopen()} (which simply calls the \method{open()} method
Moshe Zadka8a18e992001-03-01 08:40:42 +0000294on the default installed \class{OpenerDirector}.
295\end{methoddesc}
296
Fred Drake93c86712001-03-02 20:39:34 +0000297\begin{methoddesc}[OpenerDirector]{error}{proto\optional{,
298 arg\optional{, \moreargs}}}
Fred Drake399bc8c2001-11-09 03:49:29 +0000299Handle an error in a given protocol. This will call the registered
300error handlers for the given protocol with the given arguments (which
301are protocol specific). The HTTP protocol is a special case which
302uses the HTTP response code to determine the specific error handler;
303refer to the \method{http_error_*()} methods of the handler classes.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000304
305Return values and exceptions raised are the same as those
Fred Drake93c86712001-03-02 20:39:34 +0000306of \function{urlopen()}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000307\end{methoddesc}
308
Fred Drake93c86712001-03-02 20:39:34 +0000309
310\subsection{BaseHandler Objects \label{base-handler-objects}}
311
312\class{BaseHandler} objects provide a couple of methods that are
313directly useful, and others that are meant to be used by derived
314classes. These are intended for direct use:
Moshe Zadka8a18e992001-03-01 08:40:42 +0000315
316\begin{methoddesc}[BaseHandler]{add_parent}{director}
317Add a director as parent.
318\end{methoddesc}
319
320\begin{methoddesc}[BaseHandler]{close}{}
321Remove any parents.
322\end{methoddesc}
323
Fred Drake399bc8c2001-11-09 03:49:29 +0000324The following members and methods should only be used by classes
Fred Drake93c86712001-03-02 20:39:34 +0000325derived from \class{BaseHandler}:
Moshe Zadka8a18e992001-03-01 08:40:42 +0000326
327\begin{memberdesc}[BaseHandler]{parent}
Fred Drake93c86712001-03-02 20:39:34 +0000328A valid \class{OpenerDirector}, which can be used to open using a
329different protocol, or handle errors.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000330\end{memberdesc}
331
332\begin{methoddesc}[BaseHandler]{default_open}{req}
Fred Drake93c86712001-03-02 20:39:34 +0000333This method is \emph{not} defined in \class{BaseHandler}, but
334subclasses should define it if they want to catch all URLs.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000335
Fred Drake399bc8c2001-11-09 03:49:29 +0000336This method, if implemented, will be called by the parent
Fred Drake93c86712001-03-02 20:39:34 +0000337\class{OpenerDirector}. It should return a file-like object as
338described in the return value of the \method{open()} of
Fred Drake399bc8c2001-11-09 03:49:29 +0000339\class{OpenerDirector}, or \code{None}. It should raise
Fred Drake93c86712001-03-02 20:39:34 +0000340\exception{URLError}, unless a truly exceptional thing happens (for
341example, \exception{MemoryError} should not be mapped to
Fred Drake399bc8c2001-11-09 03:49:29 +0000342\exception{URLError}).
Moshe Zadka8a18e992001-03-01 08:40:42 +0000343
344This method will be called before any protocol-specific open method.
345\end{methoddesc}
346
Fred Drake47852462001-05-11 15:46:45 +0000347\begin{methoddescni}[BaseHandler]{\var{protocol}_open}{req}
Fred Drake93c86712001-03-02 20:39:34 +0000348This method is \emph{not} defined in \class{BaseHandler}, but
349subclasses should define it if they want to handle URLs with the given
350protocol.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000351
Fred Drake399bc8c2001-11-09 03:49:29 +0000352This method, if defined, will be called by the parent
Fred Drake93c86712001-03-02 20:39:34 +0000353\class{OpenerDirector}. Return values should be the same as for
354\method{default_open()}.
Fred Drake47852462001-05-11 15:46:45 +0000355\end{methoddescni}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000356
357\begin{methoddesc}[BaseHandler]{unknown_open}{req}
Fred Drake93c86712001-03-02 20:39:34 +0000358This method is \var{not} defined in \class{BaseHandler}, but
359subclasses should define it if they want to catch all URLs with no
Fred Drake399bc8c2001-11-09 03:49:29 +0000360specific registered handler to open it.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000361
Fred Drake399bc8c2001-11-09 03:49:29 +0000362This method, if implemented, will be called by the \member{parent}
Fred Drake93c86712001-03-02 20:39:34 +0000363\class{OpenerDirector}. Return values should be the same as for
364\method{default_open()}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000365\end{methoddesc}
366
367\begin{methoddesc}[BaseHandler]{http_error_default}{req, fp, code, msg, hdrs}
Fred Drake93c86712001-03-02 20:39:34 +0000368This method is \emph{not} defined in \class{BaseHandler}, but
369subclasses should override it if they intend to provide a catch-all
370for otherwise unhandled HTTP errors. It will be called automatically
371by the \class{OpenerDirector} getting the error, and should not
372normally be called in other circumstances.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000373
Fred Drake93c86712001-03-02 20:39:34 +0000374\var{req} will be a \class{Request} object, \var{fp} will be a
375file-like object with the HTTP error body, \var{code} will be the
376three-digit code of the error, \var{msg} will be the user-visible
377explanation of the code and \var{hdrs} will be a mapping object with
378the headers of the error.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000379
380Return values and exceptions raised should be the same as those
Fred Drake93c86712001-03-02 20:39:34 +0000381of \function{urlopen()}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000382\end{methoddesc}
383
Fred Drake93c86712001-03-02 20:39:34 +0000384\begin{methoddesc}[BaseHandler]{http_error_\var{nnn}}{req, fp, code, msg, hdrs}
385\var{nnn} should be a three-digit HTTP error code. This method is
386also not defined in \class{BaseHandler}, but will be called, if it
387exists, on an instance of a subclass, when an HTTP error with code
388\var{nnn} occurs.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000389
Fred Drake93c86712001-03-02 20:39:34 +0000390Subclasses should override this method to handle specific HTTP
391errors.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000392
Fred Drake93c86712001-03-02 20:39:34 +0000393Arguments, return values and exceptions raised should be the same as
394for \method{http_error_default()}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000395\end{methoddesc}
396
397
Fred Drake93c86712001-03-02 20:39:34 +0000398\subsection{HTTPRedirectHandler Objects \label{http-redirect-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000399
Fred Drake0aa811c2001-10-20 04:24:09 +0000400\note{303 redirection is not supported by this version of
401\module{urllib2}.}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000402
Fred Drake93c86712001-03-02 20:39:34 +0000403\begin{methoddesc}[HTTPRedirectHandler]{http_error_301}{req,
404 fp, code, msg, hdrs}
405Redirect to the \code{Location:} URL. This method is called by
406the parent \class{OpenerDirector} when getting an HTTP
407permanent-redirect response.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000408\end{methoddesc}
409
Fred Drake93c86712001-03-02 20:39:34 +0000410\begin{methoddesc}[HTTPRedirectHandler]{http_error_302}{req,
411 fp, code, msg, hdrs}
412The same as \method{http_error_301()}, but called for the
413temporary-redirect response.
414\end{methoddesc}
415
416
417\subsection{ProxyHandler Objects \label{proxy-handler}}
418
Fred Drake47852462001-05-11 15:46:45 +0000419\begin{methoddescni}[ProxyHandler]{\var{protocol}_open}{request}
Fred Drake93c86712001-03-02 20:39:34 +0000420The \class{ProxyHandler} will have a method
421\method{\var{protocol}_open()} for every \var{protocol} which has a
422proxy in the \var{proxies} dictionary given in the constructor. The
423method will modify requests to go through the proxy, by calling
424\code{request.set_proxy()}, and call the next handler in the chain to
425actually execute the protocol.
Fred Drake47852462001-05-11 15:46:45 +0000426\end{methoddescni}
Fred Drake93c86712001-03-02 20:39:34 +0000427
428
429\subsection{HTTPPasswordMgr Objects \label{http-password-mgr}}
430
431These methods are available on \class{HTTPPasswordMgr} and
432\class{HTTPPasswordMgrWithDefaultRealm} objects.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000433
434\begin{methoddesc}[HTTPPasswordMgr]{add_password}{realm, uri, user, passwd}
435\var{uri} can be either a single URI, or a sequene of URIs. \var{realm},
436\var{user} and \var{passwd} must be strings. This causes
Fred Drake93c86712001-03-02 20:39:34 +0000437\code{(\var{user}, \var{passwd})} to be used as authentication tokens
Moshe Zadka8a18e992001-03-01 08:40:42 +0000438when authentication for \var{realm} and a super-URI of any of the
439given URIs is given.
440\end{methoddesc}
441
442\begin{methoddesc}[HTTPPasswordMgr]{find_user_password}{realm, authuri}
Fred Drake93c86712001-03-02 20:39:34 +0000443Get user/password for given realm and URI, if any. This method will
444return \code{(None, None)} if there is no matching user/password.
445
446For \class{HTTPPasswordMgrWithDefaultRealm} objects, the realm
447\code{None} will be searched if the given \var{realm} has no matching
448user/password.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000449\end{methoddesc}
450
Moshe Zadka8a18e992001-03-01 08:40:42 +0000451
Fred Drake93c86712001-03-02 20:39:34 +0000452\subsection{AbstractBasicAuthHandler Objects
453 \label{abstract-basic-auth-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000454
455\begin{methoddesc}[AbstractBasicAuthHandler]{handle_authentication_request}
456 {authreq, host, req, headers}
Fred Drake399bc8c2001-11-09 03:49:29 +0000457Handle an authentication request by getting a user/password pair, and
458re-trying the request. \var{authreq} should be the name of the header
459where the information about the realm is included in the request,
460\var{host} is the host to authenticate to, \var{req} should be the
461(failed) \class{Request} object, and \var{headers} should be the error
462headers.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000463\end{methoddesc}
464
Fred Drake93c86712001-03-02 20:39:34 +0000465
466\subsection{HTTPBasicAuthHandler Objects
467 \label{http-basic-auth-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000468
469\begin{methoddesc}[HTTPBasicAuthHandler]{http_error_401}{req, fp, code,
470 msg, hdrs}
Fred Drake399bc8c2001-11-09 03:49:29 +0000471Retry the request with authentication information, if available.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000472\end{methoddesc}
473
Fred Drake93c86712001-03-02 20:39:34 +0000474
475\subsection{ProxyBasicAuthHandler Objects
476 \label{proxy-basic-auth-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000477
478\begin{methoddesc}[ProxyBasicAuthHandler]{http_error_407}{req, fp, code,
479 msg, hdrs}
Fred Drake399bc8c2001-11-09 03:49:29 +0000480Retry the request with authentication information, if available.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000481\end{methoddesc}
482
Moshe Zadka8a18e992001-03-01 08:40:42 +0000483
Fred Drake93c86712001-03-02 20:39:34 +0000484\subsection{AbstractDigestAuthHandler Objects
485 \label{abstract-digest-auth-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000486
Fred Drake93c86712001-03-02 20:39:34 +0000487\begin{methoddesc}[AbstractDigestAuthHandler]{handle_authentication_request}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000488 {authreq, host, req, headers}
489\var{authreq} should be the name of the header where the information about
Fred Drake399bc8c2001-11-09 03:49:29 +0000490the realm is included in the request, \var{host} should be the host to
491authenticate to, \var{req} should be the (failed) \class{Request}
492object, and \var{headers} should be the error headers.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000493\end{methoddesc}
494
Fred Drake93c86712001-03-02 20:39:34 +0000495
496\subsection{HTTPDigestAuthHandler Objects
497 \label{http-digest-auth-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000498
499\begin{methoddesc}[HTTPDigestAuthHandler]{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{ProxyDigestAuthHandler Objects
506 \label{proxy-digest-auth-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000507
508\begin{methoddesc}[ProxyDigestAuthHandler]{http_error_407}{req, fp, code,
509 msg, hdrs}
Fred Drake93c86712001-03-02 20:39:34 +0000510Retry the request with authentication information, if available.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000511\end{methoddesc}
512
Fred Drake93c86712001-03-02 20:39:34 +0000513
514\subsection{HTTPHandler Objects \label{http-handler-objects}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000515
516\begin{methoddesc}[HTTPHandler]{http_open}{req}
Fred Drake399bc8c2001-11-09 03:49:29 +0000517Send an HTTP request, which can be either GET or POST, depending on
Fred Drake93c86712001-03-02 20:39:34 +0000518\code{\var{req}.has_data()}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000519\end{methoddesc}
520
Fred Drake93c86712001-03-02 20:39:34 +0000521
522\subsection{HTTPSHandler Objects \label{https-handler-objects}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000523
524\begin{methoddesc}[HTTPSHandler]{https_open}{req}
Fred Drake93c86712001-03-02 20:39:34 +0000525Send an HTTPS request, which can be either GET or POST, depending on
526\code{\var{req}.has_data()}.
Moshe Zadka8a18e992001-03-01 08:40:42 +0000527\end{methoddesc}
528
Moshe Zadka8a18e992001-03-01 08:40:42 +0000529
Fred Drake93c86712001-03-02 20:39:34 +0000530\subsection{FileHandler Objects \label{file-handler-objects}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000531
532\begin{methoddesc}[FileHandler]{file_open}{req}
533Open the file locally, if there is no host name, or
Fred Drake93c86712001-03-02 20:39:34 +0000534the host name is \code{'localhost'}. Change the
Moshe Zadka8a18e992001-03-01 08:40:42 +0000535protocol to \code{ftp} otherwise, and retry opening
536it using \member{parent}.
537\end{methoddesc}
538
Fred Drake93c86712001-03-02 20:39:34 +0000539
540\subsection{FTPHandler Objects \label{ftp-handler-objects}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000541
542\begin{methoddesc}[FTPHandler]{ftp_open}{req}
543Open the FTP file indicated by \var{req}.
544The login is always done with empty username and password.
545\end{methoddesc}
546
Moshe Zadka8a18e992001-03-01 08:40:42 +0000547
Fred Drake93c86712001-03-02 20:39:34 +0000548\subsection{CacheFTPHandler Objects \label{cacheftp-handler-objects}}
549
550\class{CacheFTPHandler} objects are \class{FTPHandler} objects with
551the following additional methods:
Moshe Zadka8a18e992001-03-01 08:40:42 +0000552
553\begin{methoddesc}[CacheFTPHandler]{setTimeout}{t}
554Set timeout of connections to \var{t} seconds.
555\end{methoddesc}
556
557\begin{methoddesc}[CacheFTPHandler]{setMaxConns}{m}
558Set maximum number of cached connections to \var{m}.
559\end{methoddesc}
560
Fred Drake93c86712001-03-02 20:39:34 +0000561
562\subsection{GopherHandler Objects \label{gopher-handler}}
Moshe Zadka8a18e992001-03-01 08:40:42 +0000563
564\begin{methoddesc}[GopherHandler]{gopher_open}{req}
565Open the gopher resource indicated by \var{req}.
566\end{methoddesc}
Fred Drake93c86712001-03-02 20:39:34 +0000567
568
569\subsection{UnknownHandler Objects \label{unknown-handler-objects}}
570
Fred Drakea9399112001-07-05 21:14:03 +0000571\begin{methoddesc}[UnknownHandler]{unknown_open}{}
Fred Drake93c86712001-03-02 20:39:34 +0000572Raise a \exception{URLError} exception.
573\end{methoddesc}