mirror of https://github.com/python/cpython
Patch 549151, rev4: redirect posts for 301 also. Will backport to 2.2.
This commit is contained in:
parent
a685f52256
commit
162f081fb3
|
@ -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
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue