]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Patch #549151, rev4: redirect POST on 301 also.
authorMartin v. Löwis <martin@v.loewis.de>
Sat, 12 Jul 2003 07:35:35 +0000 (07:35 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Sat, 12 Jul 2003 07:35:35 +0000 (07:35 +0000)
Doc/lib/liburllib.tex
Doc/lib/liburllib2.tex
Lib/urllib2.py

index a30b03cb9750b32f2465ebb7a0523a79b1659710..5c3b897a1b3dc31fb8f49b915d39d43cb1942ec8 100644 (file)
@@ -223,12 +223,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
index 48afc9be4c3594e0c43017a8185c5a65cf9179f9..06748883732bdc438f0c821b5d0cb434c3858dcd 100644 (file)
@@ -419,8 +419,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}
 
@@ -441,9 +444,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}
index 0ea7b6c1a7df2ec9ea5dcd2e450a9f3e9d9e9420..72d799a6362a7d4084c7634cc47c1bb05a8947eb 100644 (file)
@@ -418,9 +418,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.
@@ -467,9 +467,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):
     def __init__(self, proxies=None):