aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Kriechbaumer <Kriechi@users.noreply.github.com>2020-06-08 19:35:32 +0200
committerGitHub <noreply@github.com>2020-06-08 19:35:32 +0200
commitbbc2cf331a4ab180001668bf4b51eeec505e01ab (patch)
treec11995d5a3b43252d741ed8bbd66cf47379e8d02
parent107b019b05798f97d2a0de8ef866ea6197975d9f (diff)
parent75ec05c85e597e66128c68c124f8a0376a5db7f2 (diff)
downloadmitmproxy-bbc2cf331a4ab180001668bf4b51eeec505e01ab.tar.gz
mitmproxy-bbc2cf331a4ab180001668bf4b51eeec505e01ab.tar.bz2
mitmproxy-bbc2cf331a4ab180001668bf4b51eeec505e01ab.zip
Merge pull request #4023 from rbdixon/http2_response_fix
HTTP2 response reason is None, render as '' in property.
-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:
"""