Python请求中`data`和`files`之间的区别

时间:2014-07-03 14:07:11

标签: python http request python-requests

我目前的理解是datafiles都将数据放入POST(requests.post())的主体中,但它们之间的区别是什么?应该何时使用另一个,或两者兼而有之?最后,HTTP API是否可以要求事物在一个或另一个中,或者它可能无关紧要,因为它们在接收端无法区分或什么?

1 个答案:

答案 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.headersrequest.body也可以看到这一点。有关这些内容类型及其预期用途的更多信息,请参阅例如W3C recommendations

requests QuickStart guide中给出了一些例子。这些也可能是预期用途的良好指示。