如何在Python中的请求发布中附加文件?

问题描述 投票:0回答:1

我正在尝试使用 dribbble.com API 通过 Python 上传镜头。这是他们的文档:https://developer.dribbble.com/v2/shots/#create-a-shot,所附图像是相关部分。 image 参数应该是一种文件类型,但我不确定如何在 python 请求中执行此操作。

到目前为止,我已尝试执行以下操作,并附加了我的代码。我已经尝试过端点 users/shots 和 /shots:

  1. 使用 open(myPath, "rb") 将文件包含在 params 中,类似于 requests 文档建议的方式。
  2. 将数据包含为数据,并将类型包含在标头中。

1 给出了最明显的错误,414,但我仍然不确定为什么。无论我是否包含用户代理,2 都会给出错误 403。当前代码有 1,其中 2 被注释掉。使用端点用户/镜头,我在 1 中收到错误 414,在 2 中收到错误 404。

    #data = open(myPath, "rb")
    #headers = {"content-type" : "image/jpg", "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"}
    params = {
        "image" : open(myPath, "rb"),
        "title" : myCaption
    }
    r = requests.post("https://api.dribbble.com/v2/shots?access_token="+DRIBBBLE_ACCESSTOKEN, params=params) #, data=data, headers=headers)
    print(r)
python-3.x python-requests
1个回答
0
投票

对于请求,您可以使用

files
参数将文件作为表单的一部分上传:

    form_data = {
        "title": myCaption,
    }
    files = {
        "image": open(myPath, "rb"),
    }
    r = requests.post("https://api.dribbble.com/v2/shots?access_token="+DRIBBBLE_ACCESSTOKEN, data=form_data, files=files)

params
参数用于作为 URL 一部分的参数。即使对于 POST 请求也是如此,
params
会附加到 URL。这就是为什么你得到的 414 URI 太长。

© www.soinside.com 2019 - 2024. All rights reserved.