diff options
author | Armin Ronacher <armin.ronacher@active-4.com> | 2011-01-22 13:44:22 (GMT) |
---|---|---|
committer | Armin Ronacher <armin.ronacher@active-4.com> | 2011-01-22 13:44:22 (GMT) |
commit | 59531287fdfa27431d0aacfaab3808036153f181 (patch) | |
tree | a1d48ad13f041973d552568abc904c540d79fd53 | |
parent | 8d96d77f9a386c3cadfd9c9f128b99a94aaddfb4 (diff) | |
download | cpython-59531287fdfa27431d0aacfaab3808036153f181.zip cpython-59531287fdfa27431d0aacfaab3808036153f181.tar.gz cpython-59531287fdfa27431d0aacfaab3808036153f181.tar.bz2 |
To match the behaviour of HTTP server, the HTTP client library now also encodes
headers with iso-8859-1 (latin1) encoding. It was already doing that for
incoming headers which makes this behaviour now consistent in both incoming and
outgoing direction.
-rw-r--r-- | Lib/http/client.py | 4 | ||||
-rw-r--r-- | Lib/test/test_httpservers.py | 8 | ||||
-rw-r--r-- | Misc/NEWS | 5 |
3 files changed, 14 insertions, 3 deletions
diff --git a/Lib/http/client.py b/Lib/http/client.py index bb9fa9b..347aa61 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -696,7 +696,7 @@ class HTTPConnection: self.send(connect_bytes) for header, value in self._tunnel_headers.iteritems(): header_str = "%s: %s\r\n" % (header, value) - header_bytes = header_str.encode("ascii") + header_bytes = header_str.encode("latin1") self.send(header_bytes) response = self.response_class(self.sock, method = self._method) @@ -935,7 +935,7 @@ class HTTPConnection: values = list(values) for i, one_value in enumerate(values): if hasattr(one_value, 'encode'): - values[i] = one_value.encode('ascii') + values[i] = one_value.encode('latin1') elif isinstance(one_value, int): values[i] = str(one_value).encode('ascii') value = b'\r\n\t'.join(values) diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 2cc94a9..95b9c19 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -100,7 +100,10 @@ class BaseHTTPServerTestCase(BaseTestCase): def do_LATINONEHEADER(self): self.send_response(999) self.send_header('X-Special', 'Dängerous Mind') + self.send_header('Connection', 'close') self.end_headers() + body = self.headers['x-special-incoming'].encode('utf-8') + self.wfile.write(body) def setUp(self): BaseTestCase.setUp(self) @@ -200,9 +203,12 @@ class BaseHTTPServerTestCase(BaseTestCase): self.assertEqual(res.status, 999) def test_latin1_header(self): - self.con.request('LATINONEHEADER', '/') + self.con.request('LATINONEHEADER', '/', headers={ + 'X-Special-Incoming': 'Ärger mit Unicode' + }) res = self.con.getresponse() self.assertEqual(res.getheader('X-Special'), 'Dängerous Mind') + self.assertEqual(res.read(), 'Ärger mit Unicode'.encode('utf-8')) class SimpleHTTPServerTestCase(BaseTestCase): @@ -33,6 +33,11 @@ Library encoding. This is the preferred encoding of PEP 3333 and the base encoding of HTTP 1.1. +- To match the behaviour of HTTP server, the HTTP client library now also + encodes headers with iso-8859-1 (latin1) encoding. It was already doing + that for incoming headers which makes this behaviour now consistent in + both incoming and outgoing direction. + What's New in Python 3.2 Release Candidate 1 ============================================ |