Patch 549151, rev4: redirect posts for 301 also. Will backport to 2.2.

This commit is contained in:
Martin v. Löwis 2003-07-12 07:33:32 +00:00
parent a685f52256
commit 162f081fb3
3 changed files with 22 additions and 14 deletions

View File

@ -257,12 +257,12 @@ actually retrieve a resource at an \file{https:} URL.
\begin{classdesc}{FancyURLopener}{...}
\class{FancyURLopener} subclasses \class{URLopener} providing default
handling for the following HTTP response codes: 301, 302, 303 and 401.
For 301, 302 and 303 response codes, the \mailheader{Location} header
is used to fetch the actual URL. For 401 response codes
(authentication required), basic HTTP authentication is performed.
For 301, 302 and 303 response codes, recursion is bounded by the value
of the \var{maxtries} attribute, which defaults 10.
handling for the following HTTP response codes: 301, 302, 303, 307 and
401. For the 30x response codes listed above, the
\mailheader{Location} header is used to fetch the actual URL. For 401
response codes (authentication required), basic HTTP authentication is
performed. For the 30x response codes, recursion is bounded by the
value of the \var{maxtries} attribute, which defaults to 10.
\note{According to the letter of \rfc{2616}, 301 and 302 responses to
POST requests must not be automatically redirected without

View File

@ -424,8 +424,11 @@ redirect. Otherwise, raise \exception{HTTPError} if no other
if you can't but another \class{Handler} might.
\note{The default implementation of this method does not strictly
follow \rfc{2616}: it allows automatic 302 redirection of POST
requests, because essentially all HTTP clients do this.}
follow \rfc{2616}, which says that 301 and 302 responses to POST
requests must not be automatically redirected without confirmation by
the user. In reality, browsers do allow automatic redirection of
these responses, changing the POST to a GET, and the default
implementation reproduces this behaviour.}
\end{methoddesc}
@ -446,9 +449,14 @@ The same as \method{http_error_301()}, but called for the
\begin{methoddesc}[HTTPRedirectHandler]{http_error_303}{req,
fp, code, msg, hdrs}
The same as \method{http_error_301()}, but called for the
`see other' redirect response.
`see other' response.
\end{methoddesc}
\begin{methoddesc}[HTTPRedirectHandler]{http_error_307}{req,
fp, code, msg, hdrs}
The same as \method{http_error_301()}, but called for the
`temporary redirect' response.
\subsection{ProxyHandler Objects \label{proxy-handler}}
\begin{methoddescni}[ProxyHandler]{\var{protocol}_open}{request}

View File

@ -431,9 +431,9 @@ class HTTPRedirectHandler(BaseHandler):
"""
m = req.get_method()
if (code in (301, 302, 303, 307) and m in ("GET", "HEAD")
or code in (302, 303) and m == "POST"):
# Strictly (according to RFC 2616), 302 in response to a
# POST MUST NOT cause a redirection without confirmation
or code in (301, 302, 303) and m == "POST"):
# Strictly (according to RFC 2616), 301 or 302 in response
# to a POST MUST NOT cause a redirection without confirmation
# from the user (of urllib2, in this case). In practice,
# essentially all clients do redirect in this case, so we
# do the same.
@ -480,9 +480,9 @@ class HTTPRedirectHandler(BaseHandler):
http_error_301 = http_error_303 = http_error_307 = http_error_302
inf_msg = "The HTTP server returned a redirect error that would" \
inf_msg = "The HTTP server returned a redirect error that would " \
"lead to an infinite loop.\n" \
"The last 302 error message was:\n"
"The last 30x error message was:\n"
class ProxyHandler(BaseHandler):
# Proxies must be in front