Skip to content

Commit

Permalink
Merge pull request #580 from slingamn/keepalive
Browse files Browse the repository at this point in the history
Fix and test for #458
  • Loading branch information
Kenneth Reitz committed May 4, 2012
2 parents 317f64a + 35ec6bb commit 1adaba3
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
1 change: 1 addition & 0 deletions requests/models.py
Expand Up @@ -526,6 +526,7 @@ def send(self, anyway=False, prefetch=False):
conn = self._poolmanager.connection_from_url(url)
else:
conn = connectionpool.connection_from_url(url)
self.headers['Connection'] = 'close'
except LocationParseError as e:
raise InvalidURL(e)

Expand Down
18 changes: 16 additions & 2 deletions tests/test_requests.py
Expand Up @@ -848,14 +848,28 @@ def test_empty_response(self):
r.text

def test_max_redirects(self):
"""Test the max_redirects config variable, normally and under safe_mode."""
def unsafe_callable():
requests.get("http://httpbin.org/redirect/3", config=dict(max_redirects=2))
requests.get(httpbin('redirect', '3'), config=dict(max_redirects=2))
self.assertRaises(requests.exceptions.TooManyRedirects, unsafe_callable)

# add safe mode
response = requests.get("http://httpbin.org/redirect/3", config=dict(safe_mode=True, max_redirects=2))
response = requests.get(httpbin('redirect', '3'), config=dict(safe_mode=True, max_redirects=2))
self.assertTrue(response.content is None)
self.assertTrue(isinstance(response.error, requests.exceptions.TooManyRedirects))

def test_connection_keepalive_and_close(self):
"""Test that we send 'Connection: close' when keep_alive is disabled."""
# keep-alive should be on by default
r1 = requests.get(httpbin('get'))
# XXX due to proxying issues, test the header sent back by httpbin, rather than
# the header reported in its message body. See kennethreitz/httpbin#46
self.assertEqual(r1.headers['Connection'].lower(), 'keep-alive')

# but when we disable it, we should send a 'Connection: close'
# and get the same back:
r2 = requests.get(httpbin('get'), config=dict(keep_alive=False))
self.assertEqual(r2.headers['Connection'].lower(), 'close')

if __name__ == '__main__':
unittest.main()

0 comments on commit 1adaba3

Please sign in to comment.