the redirect handling logic compares then method to upper-case strings,
so make sure the method gets upper-cased as well.
add a test to POST to /status/302 on httpbin, which fails against httpbin.org
right now. i'm submitting a pull request over there to fix that right after
this one. once that's accepted, the new test verifies that the fix works.
- Stephen Zhuang (everbird)
- Martijn Pieters
- Jonatan Heyman
+- David Bonner <dbonner@gmail.com> @rascalking
url = urljoin(resp.url, requote_uri(url))
# http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4
- if resp.status_code is codes.see_other:
+ if resp.status_code is codes.see_other and req.method != 'HEAD':
method = 'GET'
# Do what the browsers do, despite standards...
if resp.status_code in (codes.moved, codes.found) and req.method == 'POST':
method = 'GET'
- if (resp.status_code == 303) and req.method != 'HEAD':
- method = 'GET'
-
# Remove the cookie headers that were sent.
headers = req.headers
try:
# Create the Request.
req = Request()
- req.method = method
+ req.method = method.upper()
req.url = url
req.headers = headers
req.files = files
r = requests.get(httpbin('redirect', '1'))
self.assertEqual(r.status_code, 200)
+ def test_HTTP_302_ALLOW_REDIRECT_POST(self):
+ r = requests.post(httpbin('status', '302'), data={'some': 'data'})
+ self.assertEqual(r.status_code, 200)
+
def test_HTTP_200_OK_GET_WITH_PARAMS(self):
heads = {'User-agent': 'Mozilla/5.0'}