调用YouTube Reporting API创建任务时遭遇400参数错误的求助
调用YouTube Reporting API创建任务时遭遇400参数错误的求助
我看了你的代码和遇到的错误信息,问题根源在于请求格式不符合API的要求。YouTube Reporting API的jobs.create接口期望接收的是JSON格式的请求体,但你目前的请求要么是把参数放在表单数据里(用data=data),要么是放在URL查询参数里(用params=data),这两种方式都不被API认可,所以才会出现“找不到reportTypeId、name字段”的错误。
修正方案
你需要做这两个关键调整:
- 把请求的内容类型改为
application/json(其实用requests的json参数时会自动设置这个Header,也可以手动加上确保万无一失) - 使用
json=data替代data=data或params=data,让requests自动把你的数据序列化为JSON格式发送
下面是修正后的完整代码:
import requests access_token = 'MY_ACCESS_TOKEN' headers = { "Authorization": f"Bearer {access_token}", # 可选:手动指定Content-Type,用json参数时requests会自动添加 "content-type": "application/json", } url = "https://youtubereporting.googleapis.com/v1/jobs" data = { "reportTypeId": "channel_basic_a2", "name": "my_job", } # 关键:用json参数传递数据,而不是data或params response = requests.post(url, headers=headers, json=data) assert response.status_code == 200, f"{response.status_code} {response.text}" print(response.text)
为什么之前的尝试不行?
- 用
data=data:会把参数编码为表单格式(application/x-www-form-urlencoded),但API只接受JSON格式的请求体,所以无法识别这些参数 - 用
params=data:会把参数拼在URL的查询字符串里,而API的jobs.create接口是从JSON请求体中读取参数的,自然也找不到这些字段
备注:内容来源于stack exchange,提问作者Arthur Beyer
相关产品推荐
相关产品推荐

