requests.get返回Traceback错误,求API数据拉取优化及代码排查
修复Fortnite Tracker API请求错误并优化数据拉取实现
嘿,我看了你的代码,问题其实很明确——你给requests.get传的headers格式不对,这直接触发了请求错误,咱们一步步来修复并优化它:
第一步:修正基础请求代码
requests库的get方法要求headers参数是字典类型,而你传了一个字符串,这就是报错的核心原因。同时咱们可以复用已经定义的url变量,避免重复写长URL,代码更整洁:
import requests # 把配置参数集中放一起,后续修改更方便 API_KEY = "XXXXXXX" URL = "https://api.fortnitetracker.com/v1/profile/pc/madmrmeeseeks" # 正确的headers格式:键值对组成的字典 headers = { "TRN-Api-Key": API_KEY } try: # 复用已定义的URL变量,不用重复写一遍 response = requests.get(URL, headers=headers) # 先检查请求是否成功(状态码200代表正常响应) response.raise_for_status() # API返回的是JSON数据,用json()解析成Python字典,比直接打印text更实用 data = response.json() print(data) except requests.exceptions.RequestException as e: # 捕获所有请求相关的异常,比如密钥无效、用户不存在、网络问题等 print(f"请求出错啦:{e}")
第二步:更优的数据拉取方案建议
为了让代码更健壮、更易维护,给你几个实用的优化方向:
- 封装成可复用函数:把平台、用户名、API密钥做成参数,这样想查其他用户时直接调用函数就行:
def get_fortnite_profile(platform, username, api_key): # 用f-string拼接动态URL,灵活度更高 url = f"https://api.fortnitetracker.com/v1/profile/{platform}/{username}" headers = {"TRN-Api-Key": api_key} try: response = requests.get(url, headers=headers) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: print(f"获取数据失败:{e}") return None # 调用示例,比如查你的账号 my_profile = get_fortnite_profile("pc", "madmrmeeseeks", "XXXXXXX") if my_profile: # 举个例子,提取总击杀数(根据API返回的结构调整) total_kills = my_profile.get("lifeTimeStats", [{}])[0].get("value") print(f"你的总击杀数:{total_kills}") - 完善异常处理:上面的代码用了
raise_for_status(),会在状态码异常时抛出错误(比如401代表密钥无效,404代表用户找不到),能帮你快速定位问题,而不是只得到一堆模糊的错误信息。 - 安全存储API密钥:千万别把API密钥直接写在代码里!建议用环境变量来存储,比如:
这样可以避免密钥不小心泄露到代码仓库或者分享给别人。import os # 从系统环境变量中读取密钥 API_KEY = os.getenv("FORTNITE_TRACKER_API_KEY") - 按需解析数据:API返回的数据量通常很大,不用直接打印全部内容,可以根据需求提取特定字段,比如击杀数、胜率这些,让输出更清晰。
常见问题排查
如果修改后还是报错,先检查这几点:
- 确认API密钥拼写正确,没有多余的空格或者字符
- 确认用户名和平台(pc/psn/xbl)是正确的,别搞混了平台
- 检查网络连接,确保你的环境能正常访问Fortnite Tracker的API地址
内容的提问来源于stack exchange,提问作者MadMrMeeseeks
相关产品推荐
相关产品推荐

