diff options
author | Maximilian Hils <git@maximilianhils.com> | 2016-06-06 22:42:11 -0700 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2016-06-06 22:42:11 -0700 |
commit | 71b6e369f8269f1da0dc373255719d7d55c52cb3 (patch) | |
tree | f5f7f756e6b1275fc8aa183128c1413ff2d938a8 | |
parent | 1ffc273c9433fc8840b71c79879ae427c93313bd (diff) | |
download | mitmproxy-71b6e369f8269f1da0dc373255719d7d55c52cb3.tar.gz mitmproxy-71b6e369f8269f1da0dc373255719d7d55c52cb3.tar.bz2 mitmproxy-71b6e369f8269f1da0dc373255719d7d55c52cb3.zip |
change content views: escape in raw mode, show utf8 in json
-rw-r--r-- | mitmproxy/contentviews.py | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/mitmproxy/contentviews.py b/mitmproxy/contentviews.py index 28c57f06..efdf678f 100644 --- a/mitmproxy/contentviews.py +++ b/mitmproxy/contentviews.py @@ -62,11 +62,21 @@ KEY_MAX = 30 def pretty_json(s): + # type: (bytes) -> bytes try: p = json.loads(s) except ValueError: return None - return json.dumps(p, sort_keys=True, indent=4) + pretty = json.dumps(p, sort_keys=True, indent=4, ensure_ascii=False) + if isinstance(pretty, six.text_type): + # json.dumps _may_ decide to return unicode, if the JSON object is not ascii. + # Nonetheless, this function is expected to return bytes. We first try to utf8-encode + # back to bytes, and if that fails, we deliver the escaped version as a last resort. + try: + return pretty.encode("utf8", "strict") + except UnicodeError: + return json.dumps(p, sort_keys=True, indent=4, ensure_ascii=True) + return pretty def format_dict(d): @@ -153,7 +163,7 @@ class ViewRaw(View): content_types = [] def __call__(self, data, **metadata): - return "Raw", format_text(data) + return "Raw", format_text(strutils.bytes_to_escaped_str(data)) class ViewHex(View): |