diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py index e9fb2fc271f1..58ef83611dea 100644 --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -317,6 +317,9 @@ def request(self, method, url, body=None, headers=None): def getresponse(self): return MockHTTPResponse(MockFile(), {}, 200, "OK") + def close(self): + pass + class MockHandler: # useful for testing handler machinery # see add_ordered_mock_handlers() docstring diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py index 5325d62c4098..35fd1f136f05 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -1137,6 +1137,8 @@ def do_open(self, http_class, req, **http_conn_args): r = h.getresponse() # an HTTPResponse instance except socket.error as err: raise URLError(err) + finally: + h.close() r.url = req.get_full_url() # This line replaces the .msg attribute of the HTTPResponse diff --git a/Misc/NEWS b/Misc/NEWS index 75d10827ca43..6cc0f03637d8 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -25,6 +25,10 @@ Core and Builtins Library ------- +- Issue #12133: AbstractHTTPHandler.do_open() of urllib.request closes the HTTP + connection if its getresponse() method fails with a socket error. Patch + written by Ezio Melotti. + - Issue #9284: Allow inspect.findsource() to find the source of doctest functions.