import json import urllib.request class LicenseClient: def __init__(self, base_url, machine_code, timeout=10): self.base_url = base_url.rstrip('/') self.machine_code = machine_code.strip().upper() self.timeout = timeout def _post(self, path, payload): body = json.dumps(payload).encode('utf-8') request = urllib.request.Request(self.base_url + path, body, {'Content-Type': 'application/json'}) with urllib.request.urlopen(request, timeout=self.timeout) as response: return json.loads(response.read().decode('utf-8')) def login(self, card_key, device_name=None): return self._post('/api/card/verify', {'cardKey': card_key, 'machineCode': self.machine_code, 'deviceName': device_name}) def heartbeat(self, card_key): return self._post('/api/card/heartbeat', {'cardKey': card_key, 'machineCode': self.machine_code}) def list_devices(self, card_key): return self._post('/api/card/devices', {'cardKey': card_key, 'machineCode': self.machine_code}) def unbind(self, card_key): return self._post('/api/card/unbind', {'cardKey': card_key, 'machineCode': self.machine_code})