Files
mechanic-pwa/recon/scripts/dump_response.py
T

44 lines
1.6 KiB
Python

"""Dump request URL + response body for flows matching a filter substring."""
import sys, json
from mitmproxy import io as miio
from mitmproxy.exceptions import FlowReadException
flow_file = sys.argv[1]
filter_substr = sys.argv[2]
max_dumps = int(sys.argv[3]) if len(sys.argv) > 3 else 1
dumps = 0
with open(flow_file, "rb") as f:
reader = miio.FlowReader(f)
try:
for flow in reader.stream():
if not hasattr(flow, "request"):
continue
url = flow.request.pretty_url
if filter_substr not in url:
continue
if not flow.response:
continue
dumps += 1
print(f"\n=== {flow.request.method} {url} ===")
print(f"Status: {flow.response.status_code}")
print(f"Content-Type: {flow.response.headers.get('Content-Type', '?')}")
print("--- response (first 4000 chars) ---")
try:
body = flow.response.get_text(strict=False)
if body:
try:
parsed = json.loads(body)
body = json.dumps(parsed, indent=2, ensure_ascii=False)
except (json.JSONDecodeError, ValueError):
pass
print(body[:4000])
else:
print("(binary or empty)")
except Exception as e:
print(f"[error decoding body: {e}]")
if dumps >= max_dumps:
break
except FlowReadException as e:
print(f"[warn] flow truncated: {e}", file=sys.stderr)