aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2016-06-06 22:42:11 -0700
committerMaximilian Hils <git@maximilianhils.com>2016-06-06 22:42:11 -0700
commit71b6e369f8269f1da0dc373255719d7d55c52cb3 (patch)
treef5f7f756e6b1275fc8aa183128c1413ff2d938a8
parent1ffc273c9433fc8840b71c79879ae427c93313bd (diff)
downloadmitmproxy-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.py14
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):