From: Martin Panter Date: Tue, 9 Feb 2016 10:20:52 +0000 (+0000) Subject: Issue #26045: Add UTF-8 suggestion to error in http.client X-Git-Tag: v3.6.0a1~640^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=44391481d7d302bbe1c9c9eb0518b6a45f21e0b9;p=thirdparty%2FPython%2Fcpython.git Issue #26045: Add UTF-8 suggestion to error in http.client Based on patch by Guido van Rossum. --- diff --git a/Lib/http/client.py b/Lib/http/client.py index 80c80cf576e7..24231b51b796 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 @@ -1124,7 +1139,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): diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index d809414b6370..295b9fb14689 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -1042,7 +1042,7 @@ class OfflineTest(TestCase): # intentionally omitted for simplicity blacklist = {"HTTPMessage", "parse_headers"} for name in dir(client): - if name in blacklist: + if name.startswith("_") or name in blacklist: continue module_object = getattr(client, name) if getattr(module_object, "__module__", None) == "http.client": diff --git a/Misc/NEWS b/Misc/NEWS index 5aa57b923309..29a09d756af3 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -73,6 +73,9 @@ Core and Builtins Library ------- +- Issue #26045: Add UTF-8 suggestion to error message when posting a + non-Latin-1 string with http.client. + - Issue #12923: Reset FancyURLopener's redirect counter even if there is an exception. Based on patches by Brian Brazil and Daniel Rocco.