You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Buzzsprout API上传播客时持续出现422错误求助

解决Buzzsprout API创建剧集时的422错误

422状态码表示请求语义合法,但服务器无法处理请求中的实体内容,结合你的代码和Buzzsprout API规则,问题出在以下几个关键细节:

问题分析

  • 请求头冲突:你手动设置了application/json类型的Content-Type,但使用files参数上传文件时,requests会自动生成multipart/form-data格式的请求头,手动指定的json头会导致API无法正确解析请求体。
  • 参数结构错误:Buzzsprout API要求所有剧集相关参数必须嵌套在episode键下,你直接传递顶级键值对,不符合API的参数格式要求。
  • 文件参数不规范:上传音频文件时,未明确指定文件名和MIME类型,可能导致服务器无法识别文件格式。

修正后的代码

import requests

url = "https://www.buzzsprout.com/api/******/episodes.json"
headers = {
    "Authorization": "Token token=********"
    # 移除手动设置的Content-Type,让requests自动处理
}

audio_file_path = "*************************"

# 打开文件并构建规范的files参数
with open(audio_file_path, "rb") as f:
    # 提取文件名,指定MIME类型(以MP3为例)
    file_name = audio_file_path.split("/")[-1]
    files = {
        "episode[audio_file]": (file_name, f, "audio/mpeg")
    }

# 所有参数嵌套在episode键下,符合API格式要求
data = {
    "episode[title]": "Too many or too few?",
    "episode[description]": "",
    "episode[explicit]": False,
    "episode[private]": True,
    "episode[email_user_after_audio_processed]": True,
}

response = requests.post(url, headers=headers, data=data, files=files)

if response.status_code == 200:
    print("Episode created successfully.")
else:
    print("Failed to create episode. Status code:", response.status_code)
    with open('error.txt', 'w') as f:
        f.write(response.content.decode('utf-8'))

关键修改说明

  1. 移除headers中的Content-Type配置,让requests根据files参数自动生成正确的multipart/form-data请求头。
  2. 将所有剧集参数改为episode[xxx]的格式,匹配API要求的嵌套结构。
  3. 修改files参数的键为episode[audio_file],同时指定文件名和音频MIME类型(如audio/mpeg对应MP3文件),确保服务器能正确识别上传内容。

内容的提问来源于stack exchange,提问作者Shazbot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:12:16