如何使用相同的POST名称提交具有请求的多个文件?

时间:2014-10-18 21:05:14

标签: python python-3.x http-post python-requests multipartform-data

使用requests,当使用带有简单数据的POST时,我可以对多个值使用相同的名称。 CURL命令:

curl --data "source=contents1&source=contents2" example.com

可以翻译成:

data = {'source': ['contents1', 'contents2']}
requests.post('example.com', data)

同样不适用于文件。如果我翻译工作CURL命令:

curl --form "source=@./file1.txt" --form "source=@./file2.txt" example.com

为:

with open('file1.txt') as f1, open('file2.txt') as f2:
    files = {'source': [f1, f2]}
    requests.post('example.com', files=files)

仅收到最后一个文件。

来自MultiDict

werkzeug.datastructures也无济于事。

如何提交具有相同POST名称的多个文件?

1 个答案:

答案 0 :(得分:7)

不要使用字典,使用元组列表;每个元组都有(name, file)对:

files = [('source', f1), ('source', f2)]

file元素可以是另一个元组,其中包含有关该文件的更多详细信息;要包含文件名和mimetype,您可以这样做:

files = [
    ('source', ('f1.ext', f1, 'application/x-example-mimetype'),
    ('source', ('f2.ext', f2, 'application/x-example-mimetype'),
]

这在文档的高级用法章节的POST Multiple Multipart-Encoded Files section中有记录。

相关问题