如何使用Python中的请求流式传输(上传)大量数据?

时间:2018-08-09 15:12:49

标签: python-3.x python-requests

模块requests提供了高级HTTP API。我想使用requests使用POST请求通过HTTP发送数据。该文档非常简短,指出应该提供“类似对象的文件”,而没有明确说明requests对那个对象的确切期望。我有一些二进制数据,但不幸的是,这是生成的数据,并且 not 是一个类似于object的文件。我怎么可能自己实现一个符合requests期望的“文件对象”?在这方面,文档非常差,我无法通过查看requests本人的源代码来澄清这一点。在使用requests API之前,有人做过吗?

1 个答案:

答案 0 :(得分:0)

File-like object是行为类似于文件的对象的标准Python术语。这意味着,如果您有一个文件,则您有一个file-like object,只需要将文件路径传递到Requests。如果您遇到的情况更加复杂,则需要向我们提供有关数据格式的完整说明,以便我们可以更明确地为您提供帮助。

编辑:为解决您的评论,这是使用Requests将二进制文件发送到主机的代码。

url = 'http://SomeSite/post'
files = {'files': ('mydata', open('mydata', mode='rb'), 'application/octet-stream')}
r = requests.post(url, files=files)

使用Python open命令打开文件会创建file-like object

EDIT2:每当打开磁盘上的文件时,在打开对象的过程中都会创建一个类似文件的对象。但是,Python支持其他类似于文件的对象类型。一些示例包括标准stdin, stdout and stderr。另外,可以使用os.pipe以及通过subprocess.Pipe访问管道。这些对象的行为类似于文件,即可以使用文件API的子集来访问它们,并且它们的API的行为与访问真实文件的对象相同。

这就是为什么将它们称为文件状的原因,因为它们使用相同的API并以相同的方式运行。您打开,关闭文件,读取或写入管道的方式与创建文件相同。