diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2012-06-10 13:27:43 +1200 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2012-06-10 13:27:43 +1200 |
commit | 6ba5f0f35bcd37dbd15e0f7f78da183a802f6193 (patch) | |
tree | 03df678908ed62493520a7bf7b0800bd19574bf2 | |
parent | 52779d9db98dff042a0b2b5dca97440b520367df (diff) | |
download | mitmproxy-6ba5f0f35bcd37dbd15e0f7f78da183a802f6193.tar.gz mitmproxy-6ba5f0f35bcd37dbd15e0f7f78da183a802f6193.tar.bz2 mitmproxy-6ba5f0f35bcd37dbd15e0f7f78da183a802f6193.zip |
Add HTTP version to response objects.
Another change in the serialization format.
-rw-r--r-- | libmproxy/flow.py | 6 | ||||
-rw-r--r-- | libmproxy/proxy.py | 5 | ||||
-rw-r--r-- | test/test_filt.py | 1 | ||||
-rw-r--r-- | test/test_flow.py | 8 | ||||
-rw-r--r-- | test/tutils.py | 2 |
5 files changed, 14 insertions, 8 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py index b33707ca..ff5c3cf1 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -606,10 +606,10 @@ class Response(HTTPMsg): timestamp: Seconds since the epoch """ - def __init__(self, request, code, msg, headers, content, der_cert, timestamp=None): + def __init__(self, request, httpversion, code, msg, headers, content, der_cert, timestamp=None): assert isinstance(headers, ODictCaseless) self.request = request - self.code, self.msg = code, msg + self.httpversion, self.code, self.msg = httpversion, code, msg self.headers, self.content = headers, content self.der_cert = der_cert self.timestamp = timestamp or utils.timestamp() @@ -692,6 +692,7 @@ class Response(HTTPMsg): def _get_state(self): return dict( + httpversion = self.httpversion, code = self.code, msg = self.msg, headers = self.headers._get_state(), @@ -704,6 +705,7 @@ class Response(HTTPMsg): def _from_state(klass, request, state): return klass( request, + state["httpversion"], state["code"], str(state["msg"]), ODictCaseless._from_state(state["headers"]), diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py index 3be20761..7698a61f 100644 --- a/libmproxy/proxy.py +++ b/libmproxy/proxy.py @@ -309,6 +309,9 @@ class ServerConnection: if not len(parts) == 3: raise ProxyError(502, "Invalid server response: %s."%line) proto, code, msg = parts + httpversion = parse_http_protocol(proto) + if httpversion is None: + raise ProxyError(502, "Invalid HTTP version: %s."%httpversion) try: code = int(code) except ValueError: @@ -320,7 +323,7 @@ class ServerConnection: content = "" else: content = read_http_body(self.rfile, self, headers, True, self.config.body_size_limit) - return flow.Response(request, code, msg, headers, content, self.cert) + return flow.Response(request, httpversion, code, msg, headers, content, self.cert) def terminate(self): try: diff --git a/test/test_filt.py b/test/test_filt.py index 62c9fb51..2421c327 100644 --- a/test/test_filt.py +++ b/test/test_filt.py @@ -95,6 +95,7 @@ class TestMatching: headers["header_response"] = ["svalue"] f.response = flow.Response( f.request, + (1, 1), 200, "message", headers, diff --git a/test/test_flow.py b/test/test_flow.py index fd26b095..d220381d 100644 --- a/test/test_flow.py +++ b/test/test_flow.py @@ -826,7 +826,7 @@ class TestResponse: h["test"] = ["test"] c = flow.ClientConnect(("addr", 2222)) req = flow.Request(c, (1, 1), "host", 22, "https", "GET", "/", h, "content") - resp = flow.Response(req, 200, "msg", h.copy(), "content", None) + resp = flow.Response(req, (1, 1), 200, "msg", h.copy(), "content", None) assert resp._assemble() resp2 = resp.copy() @@ -871,7 +871,7 @@ class TestResponse: def test_get_cert(self): req = tutils.treq() resp = flow.Response( - req, 200, "msg", flow.ODictCaseless(), "content", + req, (1, 1), 200, "msg", flow.ODictCaseless(), "content", file(tutils.test_data.path("data/dercert")).read() ) assert resp.get_cert() @@ -884,12 +884,12 @@ class TestResponse: h["test"] = ["test"] c = flow.ClientConnect(("addr", 2222)) req = flow.Request(c, (1, 1), "host", 22, "https", "GET", "/", h, "content") - resp = flow.Response(req, 200, "msg", h.copy(), "content", None) + resp = flow.Response(req, (1, 1), 200, "msg", h.copy(), "content", None) state = resp._get_state() assert flow.Response._from_state(req, state) == resp - resp2 = flow.Response(req, 220, "foo", h.copy(), "test", None) + resp2 = flow.Response(req, (1, 1), 220, "foo", h.copy(), "test", None) assert not resp == resp2 resp._load_state(resp2._get_state()) assert resp == resp2 diff --git a/test/tutils.py b/test/tutils.py index 849b9413..2d6dad1d 100644 --- a/test/tutils.py +++ b/test/tutils.py @@ -20,7 +20,7 @@ def tresp(req=None): req = treq() headers = flow.ODictCaseless() headers["header_response"] = ["svalue"] - return flow.Response(req, 200, "message", headers, "content_response", None) + return flow.Response(req, (1, 1), 200, "message", headers, "content_response", None) def tflow(): |