使用 requests + hashlib 实现完整的登录、心跳、解绑流程。
import hashlib
import time
import requests
API_BASE = "https://你的域名"
USERNAME = "你的用户名" # 后台用户名
APP_NAME = "a" # 应用名
APP_KEY = "32位程序密钥" # 在后台「应用详情」查看
def md5_sign(act: str, card: str, mac: str, app: str, ts: int, app_key: str) -> str:
raw = f"{act}|{card}|{mac}|{app}|{ts}|{app_key}"
return hashlib.md5(raw.encode("utf-8")).hexdigest()
def call(act: str, card: str = "", mac: str = "") -> dict:
ts = int(time.time())
sign = md5_sign(act, card, mac, APP_NAME, ts, APP_KEY)
url = f"{API_BASE}/kami/{USERNAME}/check.php"
params = {"act": act, "app": APP_NAME,
"card": card, "mac": mac, "sign": sign, "ts": ts}
r = requests.get(url, params=params, timeout=10)
return r.json()
def get_info() -> dict:
url = f"{API_BASE}/kami/{USERNAME}/check.php"
r = requests.get(url, params={"act": "get_info", "app": APP_NAME}, timeout=10)
return r.json()["data"]
def get_machine_code() -> str:
"""获取机器码(跨平台示例)"""
import platform, uuid
raw = f"{platform.node()}-{uuid.getnode()}"
return hashlib.md5(raw.encode()).hexdigest().upper()
if __name__ == "__main__":
info = get_info()
print("公告:", info["notice"])
print("最新版本:", info["version"])
card = "ABCD-EFGH-JKLM-NPQR" # 用户输入的卡密
mac = get_machine_code()
resp = call("login", card, mac)
if resp["code"] == 0:
d = resp["data"]
print(f"登录成功!剩余 {d['remaining_seconds']} 秒")
# 进入主循环:每 55 秒一次心跳
while True:
time.sleep(55)
r = call("heartbeat", card, mac)
if r["code"] != 0:
print("心跳失败:", r["msg"])
break
else:
print("登录失败:", resp["msg"])