Python中使用requests POST上传文件至Dribbble API的方法
解决Python调用Dribbble API上传Shot的文件参数问题
错误原因分析
- 方案1(params传文件):
params用于传递URL查询参数,把二进制文件放在这里会被转成字符串拼接进URL,直接导致URL超长触发414错误,完全不符合API要求。 - 方案2(data传文件+手动设headers):上传文件需要用
multipart/form-data格式,手动设置content-type会破坏requests自动生成的请求边界,导致API无法正确解析请求,再加上可能用错了端点,因此返回403错误。
正确实现方法
Dribbble V2 API上传Shot的正确端点是POST /v2/user/shots,传递文件必须用requests的files参数,其他字段(如title)放在data参数中,access_token建议放在请求头里以保证安全性。
代码示例
import requests DRIBBBLE_ACCESSTOKEN = "你的访问令牌" myPath = "本地图片路径.jpg" myCaption = "作品标题" # 用with语句自动管理文件对象,避免资源泄漏 with open(myPath, "rb") as img_file: # 构建文件参数,可指定文件名和MIME类型 files = { "image": ("shot.jpg", img_file, "image/jpeg") } # 非文件字段放入data data = { "title": myCaption } # 请求头包含权限验证和用户代理 headers = { "Authorization": f"Bearer {DRIBBBLE_ACCESSTOKEN}", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9" } # 发送POST请求到正确端点 response = requests.post( "https://api.dribbble.com/v2/user/shots", files=files, data=data, headers=headers ) print(response.status_code) print(response.json())
关键注意事项
- 端点选择:必须使用
/v2/user/shots,根路径的/shots是获取shot列表的端点,不支持POST上传操作。 - 文件参数规范:
files字典的键必须是image,对应API要求的字段;值可用三元组(文件名、文件对象、MIME类型),也可直接传文件对象,但指定MIME类型更稳妥。 - 权限验证:确保你的access_token拥有上传Shot的权限,申请令牌时需勾选对应的权限范围。
内容的提问来源于stack exchange,提问作者Meera Patel
相关产品推荐
相关产品推荐

