aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTerry Long <macmantrl@me.com>2015-04-02 22:10:01 -0700
committerTerry Long <macmantrl@me.com>2015-04-02 22:10:01 -0700
commit6a24a4e3c5f6011c23a8408e83912cbd9a815664 (patch)
tree35cedff96f26a2319e21fd7652bc6bea272c2d12
parent41a1a0bef3b40b744c232a1adba478f8ac0f2c6c (diff)
downloadmitmproxy-6a24a4e3c5f6011c23a8408e83912cbd9a815664.tar.gz
mitmproxy-6a24a4e3c5f6011c23a8408e83912cbd9a815664.tar.bz2
mitmproxy-6a24a4e3c5f6011c23a8408e83912cbd9a815664.zip
Keep blank query values for flow hashing
-rw-r--r--libmproxy/flow.py2
-rw-r--r--test/test_flow.py14
2 files changed, 10 insertions, 6 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py
index eb8ee16a..9154a2f2 100644
--- a/libmproxy/flow.py
+++ b/libmproxy/flow.py
@@ -232,7 +232,7 @@ class ServerPlaybackState:
r = flow.request
_, _, path, _, query, _ = urlparse.urlparse(r.url)
- queriesArray = urlparse.parse_qsl(query)
+ queriesArray = urlparse.parse_qsl(query, keep_blank_values=True)
key = [
str(r.port),
diff --git a/test/test_flow.py b/test/test_flow.py
index b41eb630..b0b0ee5c 100644
--- a/test/test_flow.py
+++ b/test/test_flow.py
@@ -125,6 +125,10 @@ class TestServerPlaybackState:
r.request.path = "voing"
assert s._hash(r) != s._hash(r2)
+ r.request.path = "path?blank_value"
+ r2.request.path = "path?"
+ assert s._hash(r) != s._hash(r2)
+
def test_headers(self):
s = flow.ServerPlaybackState(["foo"], [], False, False, None, False, None, False)
r = tutils.tflow(resp=True)
@@ -197,12 +201,12 @@ class TestServerPlaybackState:
r2 = tutils.tflow(resp=True)
r2.request.headers["Content-Type"] = ["application/x-www-form-urlencoded"]
r2.request.content = "paramx=x&param1=1"
- # same parameters
+ # same parameters
assert s._hash(r) == s._hash(r2)
- # ignored parameters !=
+ # ignored parameters !=
r2.request.content = "paramx=x&param1=2"
assert s._hash(r) == s._hash(r2)
- # missing parameter
+ # missing parameter
r2.request.content="paramx=x"
assert s._hash(r) == s._hash(r2)
# ignorable parameter added
@@ -223,7 +227,7 @@ class TestServerPlaybackState:
r2 = tutils.tflow(resp=True)
r2.request.headers["Content-Type"] = ["application/json"]
r2.request.content = '{"param1":"1"}'
- # same content
+ # same content
assert s._hash(r) == s._hash(r2)
# distint content (note only x-www-form-urlencoded payload is analysed)
r2.request.content = '{"param1":"2"}'
@@ -238,7 +242,7 @@ class TestServerPlaybackState:
r2 = tutils.tflow(resp=True)
r2.request.headers["Content-Type"] = ["application/x-www-form-urlencoded"]
r2.request.content = "paramx=x"
- # same parameters
+ # same parameters
assert s._hash(r) == s._hash(r2)
def test_ignore_content(self):