我正在尝试使用python在内存中创建一个zip文件,然后将其附加到POST请求以使用python-requests发送。这是我写的功能
import StringIO,zipfile
code = "poopootest"
def _build_zip_inmem(code):
mf = StringIO.StringIO()
with zipfile.ZipFile(mf, mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
zf.writestr('../../../../../../../../../var/www/html/ATutor/mods/poc/1111.phtml', code)
zf.writestr('imsmanifest.xml', "noxmlhereoops")
mf.write(zf)
print mf.getvalue()
return mf.getvalue()
_build_zip_inmem(code)
除了getvalue()似乎也返回对象的内存地址外,这基本上是可行的。打印行的末尾输出为<zipfile.ZipFile object at 0x7f4e8ba434d0>
,我相信这就是我的POST失败的原因。
如何将内存中的zip转换为可以通过POST发送的二进制文件?
谢谢!!!
答案 0 :(得分:1)
mf.getvalue()
以<zipfile.ZipFile object at 0x7f4e8ba434d0>
结尾,因为您在调用mf
时将该字符串写入了mf.write(zf)
。对write()
的调用是不必要的,因为zipfile已经由mf
块写入了with zipfile.ZipFile(mf, ...)
。