.. method:: HTTPRedirectHandler.http_error_307(req, fp, code, msg, hdrs)
The same as :meth:`http_error_301`, but called for the 'temporary redirect'
- response.
+ response. It does not allow changing the request method from ``POST``
+ to ``GET``.
.. method:: HTTPRedirectHandler.http_error_308(req, fp, code, msg, hdrs)
The same as :meth:`http_error_301`, but called for the 'permanent redirect'
- response.
+ response. It does not allow changing the request method from ``POST``
+ to ``GET``.
+
+ .. versionadded:: 3.11
.. _http-cookie-processor:
o = h.parent = MockOpener()
# ordinary redirect behaviour
- for code in 301, 302, 303, 307:
+ for code in 301, 302, 303, 307, 308:
for data in None, "blah\nblah\n":
method = getattr(h, "http_error_%s" % code)
req = Request(from_url, data)
method(req, MockFile(), code, "Blah",
MockHeaders({"location": to_url}))
except urllib.error.HTTPError:
- # 307 in response to POST requires user OK
- self.assertEqual(code, 307)
+ # 307 and 308 in response to POST require user OK
+ self.assertIn(code, (307, 308))
self.assertIsNotNone(data)
self.assertEqual(o.req.get_full_url(), to_url)
try:
Handlers needed to open the requested URL. For example, the
HTTPHandler performs HTTP GET and POST requests and deals with
non-error returns. The HTTPRedirectHandler automatically deals with
-HTTP 301, 302, 303, 307 and 308 redirect errors, and the
+HTTP 301, 302, 303, 307, and 308 redirect errors, and the
HTTPDigestAuthHandler deals with digest authentication.
urlopen(url, data=None) -- Basic usage is the same as original
-Adds support for HTTP 308 redirects to :mod:`urllib`. Patch by Jochem
-Schulenklopper.
+Adds support for HTTP 308 redirects to :mod:`urllib`. See :rfc:`7538` for
+details. Patch by Jochem Schulenklopper.