调用Google Keep API时遇HttpError 400:请求含无效参数
解决Google Keep API创建笔记时的HttpError 400问题
核心问题分析
你遇到的400错误,主要来自两个关键问题:请求体格式不符合API规范,以及错误的JSON编码方式。
1. 请求体结构错误
Google Keep API的列表项(listItems)中,text字段需要直接传入字符串,而非嵌套的{"text": "..."}对象。你的原始请求体里这个嵌套结构完全不符合API要求,这是触发“无效参数”错误的主要原因。
2. JSON双重编码导致转义问题
你提到请求体元素前出现三个反斜杠,这是因为你手动对JSON字符串进行了编码,但Google API客户端库本身会自动处理Python字典到JSON的序列化流程。重复编码会导致payload被错误转义,进一步加重参数无效问题。
解决方案
1. 修正请求体结构
调整listItems的text字段为直接字符串,正确的请求体结构如下:
note_body = { "title": "Testing Title", "body": { "list": { "listItems": [ {"checked": False, "text": "Tester Text 1"}, {"checked": False, "text": "Tester Text 2"} ] } } }
2. 让客户端库处理JSON序列化
不要手动将字典转为JSON字符串,直接把Python字典传入API方法即可。示例代码:
from googleapiclient.discovery import build from google.oauth2 import service_account # 加载服务账号凭证 credentials = service_account.Credentials.from_service_account_file( 'path/to/your/service-account.json', scopes=['https://www.googleapis.com/auth/keep'] ) # 构建Keep API客户端 keep_service = build('keep', 'v1', credentials=credentials) # 创建笔记 try: note = keep_service.notes().create(body=note_body).execute() print(f"笔记创建成功,ID: {note['name']}") except Exception as e: print(f"错误详情: {e}")
3. 验证服务账号权限
- 确认Cloud Console中已启用Google Keep API
- 检查服务账号是否拥有
keep.notes.create权限,必要时重新配置授权
内容的提问来源于stack exchange,提问作者Matthew Volpe
相关产品推荐
相关产品推荐

