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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:40:07