Python请求FatSecret API OAuth2.0访问令牌报invalid_client如何解决
问题原因
你遇到的invalid_client错误是FatSecret平台对客户端凭证校验不通过导致的,后续的KeyError属于次生错误,是请求令牌失败后响应内容不存在access_token字段引发的。
排查步骤
- 核对填入的
CLIENT_ID和CLIENT_SECRET,确认和FatSecret开发者后台生成的凭证完全一致,不要带多余空格、换行,注意大小写匹配,凭证填写错误是触发该错误的最常见原因。 - 进入FatSecret应用的OAuth配置页,确认你的应用已经开启了
Client Credentials授权类型,部分应用默认仅开启授权码模式,未开启客户端凭证模式会直接校验失败。 - 移除代码中
verify=False的配置,关闭SSL校验会触发FatSecret的安全拦截规则,反而导致请求失败。 - 重置应用密钥后重试,排除旧密钥过期、被封禁的可能性。
修正后的代码
import requests import json token_url = "https://oauth.fatsecret.com/connect/token" test_api_url = "https://platform.fatsecret.com/rest/server.api" # 替换为自己的真实凭证 client_id = "<你的CLIENT_ID>" client_secret = "<你的CLIENT_SECRET>" data = { 'grant_type': 'client_credentials', 'scope': 'basic' } # 发送令牌请求,移除verify=False,手动指定Content-Type避免异常 access_token_response = requests.post( token_url, data=data, allow_redirects=False, auth=(client_id, client_secret), headers={"Content-Type": "application/x-www-form-urlencoded"} ) # 先判断请求状态再解析响应,避免KeyError if access_token_response.status_code == 200: tokens = access_token_response.json() access_token = tokens['access_token'] print(f"access token: {access_token}") # 发起业务请求,测试时先指定明确的接口方法避免参数错误 api_call_headers = {'Authorization': f'Bearer {access_token}'} api_call_response = requests.get( test_api_url, headers=api_call_headers, params={"method": "food.get", "food_id": "4384", "format": "json"} ) print(api_call_response.text) else: print(f"请求令牌失败,状态码:{access_token_response.status_code},响应内容:{access_token_response.text}")
补充说明
你代码中的scope参数配置是正确的,不需要调整,FatSecret客户端凭证模式默认的授权范围就是basic。如果调整后还是返回invalid_request,可以检查是否有多余的请求参数,或者参数格式不符合要求。
内容的提问来源于stack exchange,提问作者jung_66
相关产品推荐
相关产品推荐

