diff --git a/AUTHORS b/AUTHORS index 61874982..8dccb461 100644 --- a/AUTHORS +++ b/AUTHORS @@ -38,4 +38,5 @@ Patches and Suggestions - Armin Ronacher - Shrikant Sharat Kandula - Mikko Ohtamaa -- Den Shabalin \ No newline at end of file +- Den Shabalin +- Daniel Miller diff --git a/requests/api.py b/requests/api.py index 0cea63d4..e22ba42c 100644 --- a/requests/api.py +++ b/requests/api.py @@ -90,9 +90,11 @@ def get(url, **kwargs): :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`. :param auth: (optional) AuthObject to enable Basic HTTP Auth. :param timeout: (optional) Float describing the timeout of the request. + :param allow_redirects: (optional) Boolean. Set to False to disable redirect following. :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy. """ + kwargs.setdefault('allow_redirects', True) return request('GET', url, **kwargs) @@ -106,9 +108,11 @@ def head(url, **kwargs): :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`. :param auth: (optional) AuthObject to enable Basic HTTP Auth. :param timeout: (optional) Float describing the timeout of the request. + :param allow_redirects: (optional) Boolean. Set to False to disable redirect following. :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy. """ + kwargs.setdefault('allow_redirects', True) return request('HEAD', url, **kwargs) diff --git a/requests/models.py b/requests/models.py index 2d7fc8fe..b3a60c26 100644 --- a/requests/models.py +++ b/requests/models.py @@ -203,9 +203,7 @@ class Request(object): while ( ('location' in r.headers) and - ((self.method in ('GET', 'HEAD')) or - (r.status_code is codes.see_other) or - (self.allow_redirects)) + ((r.status_code is codes.see_other) or (self.allow_redirects)) ): r.close() diff --git a/test_requests.py b/test_requests.py index dd923471..94c144f3 100755 --- a/test_requests.py +++ b/test_requests.py @@ -422,6 +422,24 @@ class RequestsTestSuite(unittest.TestCase): self.assertEquals(rbody.get('data'), '') + def test_GET_no_redirect(self): + + for service in SERVICES: + + r = requests.get(service('redirect', '3'), allow_redirects=False) + self.assertEquals(r.status_code, 302) + self.assertEquals(len(r.history), 0) + + + def test_HEAD_no_redirect(self): + + for service in SERVICES: + + r = requests.head(service('redirect', '3'), allow_redirects=False) + self.assertEquals(r.status_code, 302) + self.assertEquals(len(r.history), 0) + + def test_redirect_history(self): for service in SERVICES: