如何构造正确的Riot API请求 解决调用返回403/401报错问题
报错根因
403 Forbidden和直接访问接口返回的401 Unauthorized都属于Riot API鉴权/配置类错误,和valorantpy库的基础逻辑无关,触发原因集中在三点:
- 代码中
KEY = 'key'为占位符,未替换为Riot开发者平台申请的有效API密钥。无效密钥发起请求时,库封装的鉴权头校验不通过会抛出403,直接裸访问接口因为缺失鉴权信息会返回401 - 客户端初始化参数错配:欧洲区域的Valorant API不需要同时传入
region="eu"和route="europe",重复传参会导致路由指向错误的集群,触发跨区域鉴权拦截 - 所用API密钥未开通Valorant相关接口权限,或个人开发密钥已过期(普通个人开发密钥默认有效期24小时,过期后自动失效)
修复方案
按以下顺序排查调整即可解决:
- 替换有效密钥:登录Riot开发者平台,注册账号后申请个人开发密钥,复制完整密钥字符串替换代码中
'key'占位符。如果需要长期使用,可提交正式产品密钥申请,个人开发密钥每天需要重新生成。 - 修正初始化参数:删除手动传入的
route="europe"参数,valorantpy库会根据传入的region自动匹配对应服务路由,无需手动指定。 - 升级依赖版本:执行
pip install --upgrade valorant升级到最新版库,避免旧版本存在的鉴权头拼接bug。 - 补充基础异常捕获,处理接口限流、对局数据为空的边界场景。
修正后可运行代码
import valorant # 替换为你自己申请的有效Riot API密钥 KEY = "你的有效Riot开发密钥" # 仅保留必要参数,欧洲区自动匹配对应路由 client = valorant.Client(KEY, locale="ru-RU", region="eu") account = client.get_user_by_name("SGT ItsRazyHero#VCTRU") match_history = account.matchlist().history competitive_match = match_history.find(queueId="competitive") if competitive_match is None: print("最近历史记录中无竞技模式对局!") exit(1) match_detail = competitive_match.get() for team in match_detail.teams: print(f"{team.teamId} 队伍成员段位:") team_players = match_detail.players.get_all(teamId=team.teamId) for player in team_players: print(f"\t{player.gameName} - {player.rank}")
注意事项
- 浏览器直接访问接口链接返回401为正常现象:Riot所有API接口要求请求头必须携带
X-Riot-Token: 你的密钥鉴权字段,浏览器直接访问不会自动携带该字段,必然返回未授权错误,不代表接口本身不可用。 - 个人开发密钥有严格频率限制:默认阈值为每秒20次请求、每10分钟100次请求,短时间高频拉取数据会触发限流返回403,批量请求时需要加合理间隔。
- 如果账号近期没有打过竞技模式对局,
find方法会返回None,需要先确认账号最近确实有对应模式的对局记录再调试。
内容的提问来源于stack exchange,提问作者Razy
相关产品推荐
相关产品推荐

