import sys, urllib.request, urllib.parse, json, base64, re
method, path, outfile = sys.argv[1:4]
body_kind = sys.argv[4] if len(sys.argv) > 4 else "none"
body_str = sys.argv[5] if len(sys.argv) > 5 else ""
headers = {}
for h in sys.argv[6:]:
    if ":" in h:
        k, v = h.split(":", 1)
        headers[k.strip()] = v.strip()
url = "http://127.0.0.1:7892" + path
body = None
if body_kind == "form" and body_str:
    body = urllib.parse.urlencode(
        dict(p.split("=", 1) for p in body_str.split("&") if "=" in p)
    ).encode()
    headers["Content-Type"] = "application/x-www-form-urlencoded"
elif body_kind == "json" and body_str:
    body = body_str.encode()
    headers["Content-Type"] = "application/json"
req = urllib.request.Request(url, data=body, headers=headers, method=method)
try:
    resp = urllib.request.urlopen(req, timeout=15)
    status = resp.status; hdrs = dict(resp.headers); raw = resp.read().decode(errors="replace")
except urllib.error.HTTPError as e:
    status = e.code; hdrs = dict(e.headers); raw = e.read().decode(errors="replace")
except Exception as e:
    status = -1; hdrs = {}; raw = repr(e)
jwt_payload = None
for src in (raw, hdrs.get("set-cookie", "")):
    m = re.search(r'eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.([A-Za-z0-9_-]+)', src)
    if m:
        seg = m.group(1); seg += "=" * (-len(seg) % 4)
        try: jwt_payload = base64.urlsafe_b64decode(seg).decode()
        except Exception: jwt_payload = None
        break
result = {"method": method, "path": path, "status": status,
          "set_cookie": hdrs.get("set-cookie"), "body": raw[:4000], "jwt_payload": jwt_payload}
with open(outfile, "w") as f:
    json.dump(result, f, indent=2)
print(json.dumps(result, indent=2))
