]> granicus.if.org Git - python/commitdiff
Patch 549151, rev4: redirect posts for 301 also. Will backport to 2.2.
authorMartin v. Löwis <martin@v.loewis.de>
Sat, 12 Jul 2003 07:33:32 +0000 (07:33 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Sat, 12 Jul 2003 07:33:32 +0000 (07:33 +0000)
Doc/lib/liburllib.tex
Doc/lib/liburllib2.tex
Lib/urllib2.py

index a8ee7bc8151b9bcf27dc34fdd0f46d81d8dc7e40..386f33e730d56888a9b011a1c342f1d82e86297a 100644 (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
index f88fd256dc99b948f240d46d22e627e9f2f583dd..783105f7a7b7bfc2e457a2326aa80815decdfd6d 100644 (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}
index ac556b564682648431a9ad36fb3a1989ad15bc88..df3729ab80c9e050c75cf276e8dd189c2cf944a2 100644 (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