import sys, urllib.request, urllib.parse, json, base64, re
method, path, formdata, cookie, outfile = sys.argv[1:6]
url = "http://127.0.0.1:7892" + path
headers = {}
body = None
if formdata:
    body = urllib.parse.urlencode(
        dict(p.split("=", 1) for p in formdata.split("&") if "=" in p)
    ).encode()
    headers["Content-Type"] = "application/x-www-form-urlencoded"
if cookie:
    headers["Cookie"] = cookie
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))
