如何用Xbox REST API及Python Requests获取调用者XUID?遇403错误求助
解决Xbox Live API调用403错误并获取XUID的问题
核心问题分析
你遇到的403错误主要源于两个问题:
- 授权头格式错误:XBL3.0 Token必须携带特定前缀才能被Xbox API识别。
- 代码逻辑与接口选择冗余:原代码使用的接口并非获取XUID的最优选择,且存在数据解析错误。
具体修复步骤
- 修正Authorization头:XBL3.0 Token的授权头必须以
XBL3.0 x=为前缀,原代码直接传入token字符串不符合API要求。 - 更换高效接口:使用
/users/me/profile/settings接口,仅请求Xuid字段,避免不必要的数据传输。 - 修复数据解析错误:原代码尝试直接从response对象取
xuid,实际XUID嵌套在返回的JSON结构中。
修正后的完整代码
import json import requests def getownerxuid(): # 读取配置文件中的XBL Token with open('configs/realminfo.json') as temp_json_file: xbltoken = json.load(temp_json_file)["xbltoken"] # 目标接口:获取当前用户XUID url = "https://profile.xboxlive.com/users/me/profile/settings" headers = { "Authorization": f"XBL3.0 x={xbltoken}", # 必须添加前缀 "x-xbl-contract-version": "2" } params = { "settings": "Xuid" # 仅请求XUID字段 } response = requests.get(url, params=params, headers=headers) if response.status_code == 200: data = response.json() # 从返回的JSON结构中提取XUID xuid = data["profileUsers"][0]["settings"][0]["value"] print(f"XUID: {xuid}") return xuid else: print(f"请求失败,状态码: {response.status_code}") print(f"响应详情: {response.text}") # 打印响应内容辅助排查
额外排查点
如果修复后仍返回403,需检查Token的权限范围:
- 解码你的XBL3.0 Token,确认是否包含
XboxLive.signin或XboxLive.profile权限。 - Realms API的Token可能仅具备Realms相关权限,无法访问用户profile接口,此时需要重新获取包含profile权限的Token。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

