Python调用Notion API使用requests.patch无法更新Block问题求助
问题原因
问题是请求格式不符合Notion API要求导致的,具体有两处错误:
- 请求头缺少
Content-Type: application/json声明,Notion API要求所有写入类请求的请求体必须为JSON格式,缺少该声明时服务端会直接忽略无效请求体,因此不会触发更新操作。 - 调用
requests.patch时直接将Python字典传给data参数,此时requests会默认将字典编码为表单格式,而非API需要的JSON结构,服务端无法识别更新参数,因此返回状态码200但内容无变化。
修正方案
修改请求头和传参方式即可,修正后代码如下:
import json, requests import dotenv, os def main(): dotenv.load_dotenv(dotenv.find_dotenv()) TOKEN = os.environ.get("TOKEN") BLOCK_ID = os.environ.get("BLOCK_ID") headers = { "Authorization": "Bearer " + TOKEN, "Notion-Version": "2021-08-16", "Content-Type": "application/json" } new_body = { "paragraph": { "text": [{ "text": { "content": "bye bye" } }] } } readurl = f"https://api.notion.com/v1/blocks/{BLOCK_ID}" # 推荐写法:使用requests自带的json参数传参,自动完成序列化和请求头适配 res = requests.patch(readurl, headers=headers, json=new_body) # 你之前注释的手动序列化写法也可以正常运行 # res = requests.request("PATCH", readurl, headers=headers, data=json.dumps(new_body)) print(res.status_code) print(json.dumps(json.loads(res.text), indent=2)) if __name__ == "__main__": main()
修改后重新发起请求即可正常更新块的文本内容。
内容的提问来源于stack exchange,提问作者unovillegas
相关产品推荐
相关产品推荐

