我目前的理解是data
和files
都将数据放入POST(requests.post()
)的主体中,但它们之间的区别是什么?应该何时使用另一个,或两者兼而有之?最后,HTTP API是否可以要求事物在一个或另一个中,或者它可能无关紧要,因为它们在接收端无法区分或什么?
答案 0 :(得分:2)
让我分享一下我发现的内容,尽管如果有人真正知道他/她正在谈论的内容可以详细说明(或纠正我),我将不胜感激。
以下是requests api docs对request()方法的这些参数的看法:
data - (可选)字典或元组列表[(键,值)](将 是形式编码的),字节或类似文件的对象,在体内发送 请求。
和
files - (可选)'name'字典:类文件对象(或 {'name':file-tuple})用于多部分编码上传。 file-tuple可以 一个2元组('filename',fileobj),3元组('filename',fileobj, 'content_type')或4元组('filename',fileobj,'content_type', custom_headers),其中'content-type'是定义内容的字符串 给定文件的类型和custom_headers类似于dict的对象 包含要为文件添加的附加标题。
我想data
将在http请求中编码为内容类型application/x-www-form-urlencoded
,而files
将编码为multipart/form-data
。如果传递数据和文件,后者也会成立。通过查看结果request.headers
和request.body
也可以看到这一点。有关这些内容类型及其预期用途的更多信息,请参阅例如W3C recommendations
requests QuickStart guide中给出了一些例子。这些也可能是预期用途的良好指示。