Python requests中`data`和`files`的区别

10 投票
1 回答
6025 浏览
提问于 2025-04-18 12:00

我现在的理解是,datafiles都可以把数据放到一个POST请求的主体里(也就是用requests.post()发送的请求),但是它们之间有什么区别呢?什么时候应该用一个而不是另一个,或者两个都用呢?最后,HTTP API是否可能要求使用其中一个,而另一个不行,还是说在接收端它们其实没有区别,根本不重要呢?

1 个回答

4

让我分享一下我找到的内容,不过如果有懂行的人能进一步解释或者纠正我,那就太好了。

以下是requests API 文档中关于request()方法参数的说明:

data -- (可选)可以是字典或元组列表[(键, 值)](会被编码为表单格式),也可以是字节或类似文件的对象,用于发送请求的主体。

还有

files -- (可选)是一个字典,包含'名称': 类似文件的对象(或者{'名称': 文件元组}),用于多部分编码上传。文件元组可以是2个元素的元组('文件名', 文件对象),3个元素的元组('文件名', 文件对象, '内容类型')或4个元素的元组('文件名', 文件对象, '内容类型', 自定义头部),其中'内容类型'是一个字符串,用来定义给定文件的内容类型,自定义头部是一个类似字典的对象,用于添加额外的文件头部。

我猜data会在HTTP请求中被编码为内容类型application/x-www-form-urlencoded,而files会被编码为multipart/form-data。如果同时传递data和files,后者依然适用。你可以通过查看生成的request.headersrequest.body来验证这一点。关于这些内容类型及其用途的更多信息,可以参考例如W3C推荐文档

requests快速入门指南中提供了一些示例。这些示例也能很好地说明这些参数的使用意图。

撰写回答