aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/filt.py22
-rw-r--r--test/mitmproxy/test_filt.py7
2 files changed, 23 insertions, 6 deletions
diff --git a/mitmproxy/filt.py b/mitmproxy/filt.py
index b1b72aa7..cb49283d 100644
--- a/mitmproxy/filt.py
+++ b/mitmproxy/filt.py
@@ -193,12 +193,22 @@ class FBod(_Rex):
help = "Body"
def __call__(self, f):
- if f.request and f.request.content:
- if self.re.search(f.request.get_decoded_content()):
- return True
- if f.response and f.response.content:
- if self.re.search(f.response.get_decoded_content()):
- return True
+
+ # HTTPFlow
+ if hasattr(f, 'request'):
+ if f.request and f.request.content:
+ if self.re.search(f.request.get_decoded_content()):
+ return True
+ if f.response and f.response.content:
+ if self.re.search(f.response.get_decoded_content()):
+ return True
+
+ # TCPFlow
+ elif hasattr(f, 'messages'):
+ for msg in f.messages:
+ if self.re.search(msg.content):
+ return True
+
return False
diff --git a/test/mitmproxy/test_filt.py b/test/mitmproxy/test_filt.py
index f6c08c67..5f3622e9 100644
--- a/test/mitmproxy/test_filt.py
+++ b/test/mitmproxy/test_filt.py
@@ -262,6 +262,13 @@ class TestMatchingTCPFlow:
e = self.err()
assert self.q("~e", e)
+ def test_body(self):
+ f = self.flow()
+ assert not self.q("~b nonexistent", f)
+ assert self.q("~b hello", f)
+ assert self.q("~b me", f)
+
+
@patch('traceback.extract_tb')
def test_pyparsing_bug(extract_tb):
"""https://github.com/mitmproxy/mitmproxy/issues/1087"""