From 1299a8f3b25a543c79f79e6edaebb033018029ca Mon Sep 17 00:00:00 2001 From: Senthil Kumaran Date: Wed, 27 Jul 2011 08:05:58 +0800 Subject: Fix closes Issue12576 - fix urlopen behavior on sites which do not send (or obsfuscates) Connection: Close header. --- Lib/test/test_urllib2net.py | 16 ++++++++++++++++ Lib/urllib/request.py | 9 ++++++--- Misc/NEWS | 3 +++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_urllib2net.py b/Lib/test/test_urllib2net.py index a475f56..cd225c9 100644 --- a/Lib/test/test_urllib2net.py +++ b/Lib/test/test_urllib2net.py @@ -174,6 +174,22 @@ class OtherNetworkTests(unittest.TestCase): opener.open(request) self.assertEqual(request.get_header('User-agent'),'Test-Agent') + def test_sites_no_connection_close(self): + # Some sites do not send Connection: close header. + # Verify that those work properly. (#issue12576) + + try: + with urllib.request.urlopen('http://www.imdb.com') as res: + pass + except ValueError as e: + self.fail("urlopen failed for sites not sending Connection:close") + else: + self.assertTrue(res) + + req = urllib.request.urlopen('http://www.imdb.com') + res = req.read() + self.assertTrue(res) + def _test_urls(self, urls, handlers, retry=True): import time import logging diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py index a09a353..534408d 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -1134,11 +1134,14 @@ class AbstractHTTPHandler(BaseHandler): try: h.request(req.get_method(), req.selector, req.data, headers) - r = h.getresponse() # an HTTPResponse instance - except socket.error as err: + except socket.error as err: # timeout error raise URLError(err) finally: - h.close() + try: + r = h.getresponse() # an HTTPResponse instance + except Exception as exp: + h.close() + raise exp r.url = req.get_full_url() # This line replaces the .msg attribute of the HTTPResponse diff --git a/Misc/NEWS b/Misc/NEWS index d91a993..2d6d315 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -37,6 +37,9 @@ Core and Builtins Library ------- +- Issue #12576: Fix urlopen behavior on sites which do not send (or obfuscates) + Connection:close header. + - Issue #12102: Document that buffered files must be flushed before being used with mmap. Patch by Steffen Daode Nurpmeso. -- cgit v0.12