调用Strava API获统计数据正常,获取活动报401错误求助
问题描述
基于现有Python代码模板为亲属搭建Strava活动与统计展示网页时,出现以下异常:
- 可正常获取统计数据,但调用活动列表API时返回401未授权错误
- 执行获取最近5项活动脚本的输出:
root@odroid:/var/lib/strava/Sues# ./get_strava_activities.py Token has not expired, returning Getting activities https://www.strava.com/api/v3/athlete/activities?per_page=5 {'Authorization': 'Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'} Response code = 401 Token saved
- 已反复核对
.env文件中的client_id、client_secret、refresh_token、access_token、athlete_id、grant_type及文件路径,确认信息准确无误
排查解决思路
核对API权限范围差异
- Strava API的统计接口(如
/athlete/stats)和活动接口(/athlete/activities)所需权限不同:统计接口通常仅需read基础权限,而活动接口需要activity:read或activity:read_all权限。 - 确认当初授权时是否申请了活动读取权限,若授权时仅勾选基础权限,需重新发起授权流程,获取包含活动权限的
refresh_token。
- Strava API的统计接口(如
验证access_token的有效性与归属
- 即使脚本提示“Token has not expired”,仍需验证token归属:用当前access_token调用
/athlete接口,检查返回的athlete_id是否与.env中配置的一致,确认token属于目标用户。 - 手动调用Strava的token刷新接口,重新生成新的access_token,替换现有token后测试活动接口。
- 即使脚本提示“Token has not expired”,仍需验证token归属:用当前access_token调用
检查请求头与端点格式
- 确认活动接口端点正确:
https://www.strava.com/api/v3/athlete/activities是官方标准端点,同时检查请求头中Authorization的格式是否严格为Bearer <token>,无多余空格、符号或拼写错误(如Authorizaiton)。 - 排查脚本中构建请求头的代码,确认token是否被完整读取,未因编码、换行符等问题截断。
- 确认活动接口端点正确:
确认.env文件加载逻辑
- 确保脚本正确加载
.env文件的所有变量,可在脚本中打印加载后的token前几位,与实际值对比,排除因文件读取异常导致的token错误。
- 确保脚本正确加载
检查Strava应用后台设置
- 登录Strava开发者后台,确认应用状态为已发布(未发布应用存在访问限制),且应用权限配置中包含活动读取权限。
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

