aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad Dixon <brad.dixon@carvesystems.com>2020-06-04 20:26:31 -0400
committerBrad Dixon <brad.dixon@carvesystems.com>2020-06-08 09:09:09 -0400
commit75ec05c85e597e66128c68c124f8a0376a5db7f2 (patch)
treec11995d5a3b43252d741ed8bbd66cf47379e8d02
parent107b019b05798f97d2a0de8ef866ea6197975d9f (diff)
downloadmitmproxy-75ec05c85e597e66128c68c124f8a0376a5db7f2.tar.gz
mitmproxy-75ec05c85e597e66128c68c124f8a0376a5db7f2.tar.bz2
mitmproxy-75ec05c85e597e66128c68c124f8a0376a5db7f2.zip
HTTP2 response reason is None, render as '' in property.
Fixes an error triggered when displaying an HTTP2 response loaded from a file.
-rw-r--r--mitmproxy/net/http/response.py8
-rw-r--r--test/mitmproxy/net/http/test_response.py6
2 files changed, 12 insertions, 2 deletions
diff --git a/mitmproxy/net/http/response.py b/mitmproxy/net/http/response.py
index 2e864405..c4dbf408 100644
--- a/mitmproxy/net/http/response.py
+++ b/mitmproxy/net/http/response.py
@@ -122,10 +122,14 @@ class Response(message.Message):
def reason(self):
"""
HTTP Reason Phrase, e.g. "Not Found".
- This is always :py:obj:`None` for HTTP2 requests, because HTTP2 responses do not contain a reason phrase.
+ HTTP2 responses do not contain a reason phrase and self.data.reason will be :py:obj:`None`.
+ When :py:obj:`None` return an empty reason phrase so that functions expecting a string work properly.
"""
# Encoding: http://stackoverflow.com/a/16674906/934719
- return self.data.reason.decode("ISO-8859-1", "surrogateescape")
+ if self.data.reason is not None:
+ return self.data.reason.decode("ISO-8859-1", "surrogateescape")
+ else:
+ return ""
@reason.setter
def reason(self, reason):
diff --git a/test/mitmproxy/net/http/test_response.py b/test/mitmproxy/net/http/test_response.py
index 27c16be6..08d72840 100644
--- a/test/mitmproxy/net/http/test_response.py
+++ b/test/mitmproxy/net/http/test_response.py
@@ -77,6 +77,12 @@ class TestResponseCore:
resp.data.reason = b'cr\xe9e'
assert resp.reason == "crée"
+ # HTTP2 responses do not contain a reason phrase and self.data.reason will be None.
+ # This should render to an empty reason phrase so that functions
+ # expecting a string work properly.
+ resp.data.reason = None
+ assert resp.reason == ""
+
class TestResponseUtils:
"""