如何在 python 中发送 multipart/form-data
和 requests
?如何发送文件,我明白,但是如何通过这种方法发送表单数据就无法理解。
原文由 agrynchuk 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何在 python 中发送 multipart/form-data
和 requests
?如何发送文件,我明白,但是如何通过这种方法发送表单数据就无法理解。
原文由 agrynchuk 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
Basically, if you specify a
files
parameter (a dictionary), thenrequests
will send amultipart/form-data
POST instead of aapplication/x-www-form-urlencoded
POST.您不限于使用该词典中的实际文件,但是:httpbin.org 让你知道你发布了什么标题;在
response.json()
我们有:更好的是,您可以通过使用元组而不是单个字符串或字节对象来进一步控制每个部分的文件名、内容类型和附加标头。元组预计包含 2 到 4 个元素;文件名、内容、可选的内容类型和更多标题的可选字典。
我将使用
None
的元组形式作为文件名,以便从这些部分的请求中删除filename="..."
参数:files
也可以是双值元组的列表,如果您需要排序和/或具有相同名称的多个字段:如果同时指定
files
和data
,那么它取决于data
的 值 body. 将用于创建 POST如果data
是一个字符串,则只使用它;否则同时使用data
和files
,首先列出data
中的元素。还有优秀的
requests-toolbelt
项目,其中包括 高级多部分支持。它采用与files
参数相同格式的字段定义,但与requests
不同,它默认不设置文件名参数。此外,它可以从打开的文件对象流式传输请求,其中requests
将首先在内存中构建请求主体:字段遵循相同的约定;使用包含 2 到 4 个元素的元组来添加文件名、部分 mime 类型或额外的标题。与
files
参数不同,如果不使用元组,则不会尝试查找默认值filename
值。