树莓派Pico用MicroPython调用Google Tasks API遇认证问题求助
解决Google Tasks API认证失败问题(树莓派Pico + MicroPython)
问题根源
- URL格式错误:你第一个请求的URL用了
&key=,正确的参数分隔符应该是?,因此返回404。 - API Key权限不足:Google Tasks API属于用户私有数据接口,仅用API Key无法访问私人任务列表,必须使用OAuth 2.0访问令牌完成身份验证。
分步解决方法
1. 修正URL格式(仅作测试用,实际仍需OAuth)
正确的带API Key的URL写法:
url = f"https://tasks.googleapis.com/tasks/v1/lists/{tasklist}/tasks?key={API_KEY}"
注意:即使URL正确,API Key也只能访问公开任务列表,你的私人列表仍会返回401,因此必须使用OAuth2方案。
2. 正确使用OAuth 2.0访问令牌
步骤1:获取有效访问令牌
你已创建OAuth2客户端凭证,接下来需获取访问令牌和刷新令牌:
- 通过浏览器访问Google OAuth2授权端点,携带客户端ID、重定向URI、权限范围(
https://www.googleapis.com/auth/tasks)完成授权,得到授权码。 - 用授权码调用令牌端点,交换得到有效期约1小时的访问令牌,以及长期有效的刷新令牌。
步骤2:在请求中添加授权头
将访问令牌放入请求的Authorization头中,示例代码:
from WiFiNetwork import WiFi import urequests as requests # 初始化网络连接 network = WiFi() ip = network.ConnectWiFi() tasklist = "My_Tasklist_ID" ACCESS_TOKEN = "你的OAuth2访问令牌" # 获取任务列表的请求 url = f"https://tasks.googleapis.com/tasks/v1/lists/{tasklist}/tasks" headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"} res = requests.get(url, headers=headers) print(res.status_code) print(res.text) # 添加补水提醒任务的请求示例 new_task = { "title": "水箱水位过低,需补水", "notes": "树莓派Pico监控触发" } add_task_url = f"https://tasks.googleapis.com/tasks/v1/lists/{tasklist}/tasks" add_res = requests.post(add_task_url, json=new_task, headers=headers) print(add_res.status_code) print(add_res.text)
3. 简化长期授权(避免频繁手动更新令牌)
由于访问令牌有效期短,适合MicroPython的方案是用刷新令牌自动获取新的访问令牌:
def refresh_access_token(client_id, client_secret, refresh_token): token_url = "https://oauth2.googleapis.com/token" payload = { "client_id": client_id, "client_secret": client_secret, "refresh_token": refresh_token, "grant_type": "refresh_token" } res = requests.post(token_url, data=payload) if res.status_code == 200: return res.json()["access_token"] else: raise Exception(f"刷新令牌失败: {res.text}") # 使用示例 CLIENT_ID = "你的客户端ID" CLIENT_SECRET = "你的客户端密钥" REFRESH_TOKEN = "你的刷新令牌" # 先刷新获取最新访问令牌 access_token = refresh_access_token(CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN) headers = {"Authorization": f"Bearer {access_token}"} # 后续请求直接使用该headers即可
关键注意事项
- 确保OAuth2客户端凭证类型为桌面应用(适配树莓派Pico这类无UI设备)。
- 权限范围需包含
https://www.googleapis.com/auth/tasks(读写权限)或https://www.googleapis.com/auth/tasks.readonly(只读权限),按需选择。 - 确认MicroPython的
urequests库支持json参数和headers参数,建议使用最新版本。
内容的提问来源于stack exchange,提问作者edwin
相关产品推荐
相关产品推荐

