diff options
author | Martin Panter <vadmium+py@gmail.com> | 2016-02-09 11:57:11 (GMT) |
---|---|---|
committer | Martin Panter <vadmium+py@gmail.com> | 2016-02-09 11:57:11 (GMT) |
commit | 192697e33b77681cf127871b2ebe3bbbea7c64ed (patch) | |
tree | 8f68e589061d6a0650181268c0b881deaa6c6944 /Lib/http | |
parent | d0c1f7743d7abe802e2013f26c14590c107e8350 (diff) | |
parent | 44391481d7d302bbe1c9c9eb0518b6a45f21e0b9 (diff) | |
download | cpython-192697e33b77681cf127871b2ebe3bbbea7c64ed.zip cpython-192697e33b77681cf127871b2ebe3bbbea7c64ed.tar.gz cpython-192697e33b77681cf127871b2ebe3bbbea7c64ed.tar.bz2 |
Issue #26045: Merge http.client error addition from 3.5
Diffstat (limited to 'Lib/http')
-rw-r--r-- | Lib/http/client.py | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/Lib/http/client.py b/Lib/http/client.py index f69e7ba..36e4e31 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -146,6 +146,21 @@ _is_illegal_header_value = re.compile(rb'\n(?![ \t])|\r(?![ \t\n])').search _METHODS_EXPECTING_BODY = {'PATCH', 'POST', 'PUT'} +def _encode(data, name='data'): + """Call data.encode("latin-1") but show a better error message.""" + try: + return data.encode("latin-1") + except UnicodeEncodeError as err: + raise UnicodeEncodeError( + err.encoding, + err.object, + err.start, + err.end, + "%s (%.20r) is not valid Latin-1. Use %s.encode('utf-8') " + "if you want to send it encoded in UTF-8." % + (name.title(), data[err.start:err.end], name)) from None + + class HTTPMessage(email.message.Message): # XXX The only usage of this method is in # http.server.CGIHTTPRequestHandler. Maybe move the code there so @@ -1173,7 +1188,7 @@ class HTTPConnection: if isinstance(body, str): # RFC 2616 Section 3.7.1 says that text default has a # default charset of iso-8859-1. - body = body.encode('iso-8859-1') + body = _encode(body, 'body') self.endheaders(body) def getresponse(self): |