aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark E. Haase <mehaase@gmail.com>2011-12-28 17:32:29 -0500
committerMark E. Haase <mehaase@gmail.com>2011-12-28 17:32:29 -0500
commit05111f093d66d5a277a69e8a610e4bf10ca249c6 (patch)
treed462d610057afb64df80eb0a5b05dd7cf942ea00
parent965d318164f430a1b1680f205616954aac2faace (diff)
downloadmitmproxy-05111f093d66d5a277a69e8a610e4bf10ca249c6.tar.gz
mitmproxy-05111f093d66d5a277a69e8a610e4bf10ca249c6.tar.bz2
mitmproxy-05111f093d66d5a277a69e8a610e4bf10ca249c6.zip
Add support for filtering by HTTP method (get, post, etc.) using ~m operator.
-rw-r--r--libmproxy/filt.py15
-rw-r--r--test/test_filt.py8
2 files changed, 22 insertions, 1 deletions
diff --git a/libmproxy/filt.py b/libmproxy/filt.py
index bf7d20c1..b5af44de 100644
--- a/libmproxy/filt.py
+++ b/libmproxy/filt.py
@@ -34,6 +34,7 @@
~bq rex Expression in the body of response
~t rex Shortcut for content-type header.
+ ~m rex Method
~u rex URL
~c CODE Response code.
rex Equivalent to ~u rex
@@ -178,7 +179,18 @@ class FBodResponse(_Rex):
elif o.content and re.search(self.expr, o.content):
return True
return False
-
+
+
+class FMethod(_Rex):
+ code = "m"
+ help = "Method"
+ def __call__(self, o):
+ if o._is_response():
+ return False
+ elif o.method:
+ return re.search(self.expr, o.method, re.IGNORECASE)
+ return False
+
class FUrl(_Rex):
code = "u"
@@ -260,6 +272,7 @@ filt_rex = [
FBodRequest,
FBodResponse,
FBod,
+ FMethod,
FUrl,
FRequestContentType,
FResponseContentType,
diff --git a/test/test_filt.py b/test/test_filt.py
index 5067d841..6c11938e 100644
--- a/test/test_filt.py
+++ b/test/test_filt.py
@@ -16,6 +16,7 @@ class uParsing(libpry.AutoTree):
assert not filt.parse("~b")
assert filt.parse("~q")
assert filt.parse("~c 10")
+ assert filt.parse("~m foobar")
assert filt.parse("~u foobar")
assert filt.parse("~q ~c 10")
p = filt.parse("~q ~c 10")
@@ -171,6 +172,13 @@ class uMatching(libpry.AutoTree):
assert not self.q("~bs response", q)
assert self.q("~bs response", s)
+ def test_method(self):
+ q = self.req()
+ s = self.resp()
+ assert self.q("~m get", q)
+ assert not self.q("~m post", q)
+ assert not self.q("~m get", s)
+
def test_url(self):
q = self.req()
s = self.resp()