diff --git a/libmproxy/console/connview.py b/libmproxy/console/connview.py index b722f78e1..7bdf75bd8 100644 --- a/libmproxy/console/connview.py +++ b/libmproxy/console/connview.py @@ -374,7 +374,7 @@ class ConnectionView(common.WWrap): conn.headers = flow.ODict(lst) def set_query(self, lst, conn): - conn.set_query(lst) + conn.set_query(flow.ODict(lst)) def set_form(self, lst, conn): conn.set_form_urlencoded(lst) @@ -396,7 +396,7 @@ class ConnectionView(common.WWrap): elif part == "h": self.master.view_kveditor("Editing headers", conn.headers.lst, self.set_headers, conn) elif part == "q": - self.master.view_kveditor("Editing query", conn.get_query(), self.set_query, conn) + self.master.view_kveditor("Editing query", conn.get_query().lst, self.set_query, conn) elif part == "u" and self.state.view_flow_mode == common.VIEW_FLOW_REQUEST: self.master.prompt_edit("URL", conn.get_url(), self.set_url) elif part == "m" and self.state.view_flow_mode == common.VIEW_FLOW_REQUEST: diff --git a/libmproxy/flow.py b/libmproxy/flow.py index f29dcf27a..0ca4d2625 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -69,6 +69,9 @@ class ODict: new.append(i) return new + def __len__(self): + return len(self.lst) + def __setitem__(self, k, values): if isinstance(values, basestring): raise ValueError("ODict values should be lists.") @@ -323,7 +326,7 @@ class Request(HTTPMsg): _, _, _, _, query, _ = urlparse.urlparse(self.get_url()) if not query: return [] - return utils.urldecode(query) + return ODict(utils.urldecode(query)) def set_query(self, q): """ @@ -331,7 +334,7 @@ class Request(HTTPMsg): string. """ scheme, netloc, path, params, _, fragment = urlparse.urlparse(self.get_url()) - query = utils.urlencode(q) + query = utils.urlencode(q.lst) self.set_url(urlparse.urlunparse([scheme, netloc, path, params, query, fragment])) def get_url(self): diff --git a/test/test_flow.py b/test/test_flow.py index 250127a9b..ab92d130e 100644 --- a/test/test_flow.py +++ b/test/test_flow.py @@ -657,7 +657,7 @@ class uRequest(libpry.AutoTree): r = flow.Request(None, "host", 22, "https", "GET", "/foo?x=y&a=b", h, "content") q = r.get_query() - assert q == [("x", "y"), ("a", "b")] + assert q.lst == [("x", "y"), ("a", "b")] r = flow.Request(None, "host", 22, "https", "GET", "/", h, "content") q = r.get_query() @@ -669,9 +669,9 @@ class uRequest(libpry.AutoTree): r = flow.Request(None, "host", 22, "https", "GET", "/foo?x=y&a=b", h, "content") assert r.get_query() - r.set_query([]) + r.set_query(flow.ODict([])) assert not r.get_query() - qv = [("a", "b"), ("c", "d")] + qv = flow.ODict([("a", "b"), ("c", "d")]) r.set_query(qv) assert r.get_query() == qv