如何使用Tornado发送带有http POST的压缩文件

时间:2016-02-26 12:06:49

标签: python gzip tornado

我需要发送带有HTTP请求的压缩JSON文件

def create_gzip():
    with open('articoli.json', 'rb') as f_in, gzip.open('articoli.json.gz', 'wb') as f_out:
        shutil.copyfileobj(f_in, f_out)
    return open('articoli.json.gz', 'rb')

body = create_gzip()
headers = tornado.httputil.HTTPHeaders({"content-type": "application/zip charset=utf-8"})
request = tornado.httpclient.HTTPRequest("http://localhost:8889/variazione", method='POST', headers=headers, body=body)
http_response = http_client.fetch(request)

但是当我尝试这样做时,会出现以下错误:

 TypeError: Expected bytes, unicode, or None; got <type 'file'>

如何发送文件?有一种方法可以让请求接受一个gzip吗?

2 个答案:

答案 0 :(得分:1)

实际上非常简单:传递给body的{​​{1}}必须是:

HTTPRequest

答案 1 :(得分:0)

您的body包含文件,而不是实际数据。试试这个:

gzip_file = create_gzip()
body = bytearray(gzip_file.read())