mirror of
https://github.com/python/cpython.git
synced 2025-09-19 07:00:59 +00:00
Fix Issue8572 - httplib getheader() throws error instead of default
This commit is contained in:
parent
aed05eb6b8
commit
9f8dc4441f
3 changed files with 45 additions and 3 deletions
|
@ -466,7 +466,8 @@ statement.
|
||||||
.. method:: HTTPResponse.getheader(name, default=None)
|
.. method:: HTTPResponse.getheader(name, default=None)
|
||||||
|
|
||||||
Get the contents of the header *name*, or *default* if there is no matching
|
Get the contents of the header *name*, or *default* if there is no matching
|
||||||
header.
|
header. If *default* is an iterator other than a string, then the return
|
||||||
|
value will be a string consisting of items of the iterator joined by comma.
|
||||||
|
|
||||||
|
|
||||||
.. method:: HTTPResponse.getheaders()
|
.. method:: HTTPResponse.getheaders()
|
||||||
|
|
|
@ -602,7 +602,11 @@ class HTTPResponse(io.RawIOBase):
|
||||||
def getheader(self, name, default=None):
|
def getheader(self, name, default=None):
|
||||||
if self.headers is None:
|
if self.headers is None:
|
||||||
raise ResponseNotReady()
|
raise ResponseNotReady()
|
||||||
return ', '.join(self.headers.get_all(name, default))
|
headers = self.headers.get_all(name) or default
|
||||||
|
if isinstance(headers, str) or not hasattr(headers, '__iter__'):
|
||||||
|
return headers
|
||||||
|
else:
|
||||||
|
return ', '.join(headers)
|
||||||
|
|
||||||
def getheaders(self):
|
def getheaders(self):
|
||||||
"""Return list of (header, value) tuples."""
|
"""Return list of (header, value) tuples."""
|
||||||
|
|
|
@ -442,9 +442,46 @@ class RequestBodyTest(TestCase):
|
||||||
self.assertEqual("5", message.get("content-length"))
|
self.assertEqual("5", message.get("content-length"))
|
||||||
self.assertEqual(b'body\xc1', f.read())
|
self.assertEqual(b'body\xc1', f.read())
|
||||||
|
|
||||||
|
|
||||||
|
class HTTPResponseTest(TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
body = "HTTP/1.1 200 Ok\r\nMy-Header: first-value\r\nMy-Header: \
|
||||||
|
second-value\r\n\r\nText"
|
||||||
|
sock = FakeSocket(body)
|
||||||
|
self.resp = client.HTTPResponse(sock)
|
||||||
|
self.resp.begin()
|
||||||
|
|
||||||
|
def test_getting_header(self):
|
||||||
|
header = self.resp.getheader('My-Header')
|
||||||
|
self.assertEqual(header, 'first-value, second-value')
|
||||||
|
|
||||||
|
header = self.resp.getheader('My-Header', 'some default')
|
||||||
|
self.assertEqual(header, 'first-value, second-value')
|
||||||
|
|
||||||
|
def test_getting_nonexistent_header_with_string_default(self):
|
||||||
|
header = self.resp.getheader('No-Such-Header', 'default-value')
|
||||||
|
self.assertEqual(header, 'default-value')
|
||||||
|
|
||||||
|
def test_getting_nonexistent_header_with_iterable_default(self):
|
||||||
|
header = self.resp.getheader('No-Such-Header', ['default', 'values'])
|
||||||
|
self.assertEqual(header, 'default, values')
|
||||||
|
|
||||||
|
header = self.resp.getheader('No-Such-Header', ('default', 'values'))
|
||||||
|
self.assertEqual(header, 'default, values')
|
||||||
|
|
||||||
|
def test_getting_nonexistent_header_without_default(self):
|
||||||
|
header = self.resp.getheader('No-Such-Header')
|
||||||
|
self.assertEqual(header, None)
|
||||||
|
|
||||||
|
def test_getting_header_defaultint(self):
|
||||||
|
header = self.resp.getheader('No-Such-Header',default=42)
|
||||||
|
self.assertEqual(header, 42)
|
||||||
|
|
||||||
def test_main(verbose=None):
|
def test_main(verbose=None):
|
||||||
support.run_unittest(HeaderTests, OfflineTest, BasicTest, TimeoutTest,
|
support.run_unittest(HeaderTests, OfflineTest, BasicTest, TimeoutTest,
|
||||||
HTTPSTimeoutTest, RequestBodyTest, SourceAddressTest)
|
HTTPSTimeoutTest, RequestBodyTest, SourceAddressTest,
|
||||||
|
HTTPResponseTest)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
test_main()
|
test_main()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue