summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSenthil Kumaran <senthil@uthcode.com>2011-07-27 00:06:44 (GMT)
committerSenthil Kumaran <senthil@uthcode.com>2011-07-27 00:06:44 (GMT)
commit7496fef8ff3ef9c54929a916cd5d42cd6fcdd437 (patch)
tree7df63b5f2861b48f3549a19bc270fcd1cc18e437
parentd3b2aefbfe69df40dc2f0adf31a188fbbdcc5923 (diff)
parent1299a8f3b25a543c79f79e6edaebb033018029ca (diff)
downloadcpython-7496fef8ff3ef9c54929a916cd5d42cd6fcdd437.zip
cpython-7496fef8ff3ef9c54929a916cd5d42cd6fcdd437.tar.gz
cpython-7496fef8ff3ef9c54929a916cd5d42cd6fcdd437.tar.bz2
merge from 3.2 - Fix closes Issue12576 - fix urlopen behavior on sites which do not send (or obsfuscates) Connection: Close header.
-rw-r--r--Lib/test/test_urllib2net.py16
-rw-r--r--Lib/urllib/request.py9
-rw-r--r--Misc/NEWS3
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 553fe3f..ca643eb 100644
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -1143,11 +1143,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 6010328..380b038 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -237,6 +237,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.