summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArmin Ronacher <armin.ronacher@active-4.com>2011-01-22 13:44:22 (GMT)
committerArmin Ronacher <armin.ronacher@active-4.com>2011-01-22 13:44:22 (GMT)
commit59531287fdfa27431d0aacfaab3808036153f181 (patch)
treea1d48ad13f041973d552568abc904c540d79fd53
parent8d96d77f9a386c3cadfd9c9f128b99a94aaddfb4 (diff)
downloadcpython-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.py4
-rw-r--r--Lib/test/test_httpservers.py8
-rw-r--r--Misc/NEWS5
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):
diff --git a/Misc/NEWS b/Misc/NEWS
index 3b55447..22bc428 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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
============================================