我一直在研究这个SpiderOak的Zipstream模块,它基本上允许你流式传输和压缩文件或文件夹,而无需向光盘写入任何内容。它产生大小不规则的数据块。在
现在,我尝试将一个目录上载到一个文件托管站点,该站点要求我在post请求中发送file
和apikey
字段。根据请求,我必须为apikey构建dict,如下所示:
data = {'apikey': 'myapikey'}
还可以将整个zipstream读入字符串并将其传递到编码dict的文件:
^{pr2}$然后发出请求
r = requests.post(url, data=data, files=files).
这行得通。不过,我想在将来传输更大的内容,而在内存中读取整个文件是一个坏主意。 我在“请求高级”部分看到您可以发送一个生成器作为数据字段,但是之后我不能发送api密钥,必须手动修改头来设置内容类型和所有这些内容,这样它就不能工作了。还试图用api密钥和zip文件生成器生成一个字典 数据={ '文件':('我的目录.zip',生成器()), “apikey”:“myapikey” }在
但这失败了(如预期)。在
有没有一种方法可以利用一个生成器对多部分表单数据中的文件生成字符串,从而对请求进行黑客攻击?在
好吧,经过一番挣扎,我设法不需要请求,而是使用模块poster。在
首先,我为zipstream创建了一个fileobject包装器,如下所示:
为了有一个简单的api(代码不知羞耻地改编自另一个例子)。在
然后根据poster的文档创建必要的多部分对象:
^{pr2}$最后一种方法是跳过重置,以防fileobject字段是Zipit实例:
这对我有用。希望这能对你们五个读到这篇文章的人有所帮助。在
相关问题 更多 >
编程相关推荐