如何使用Python下载请求下载.gz文件而不解码它?

时间:2014-09-09 16:07:59

标签: python download request

我正在使用requests下载文件:

import requests

req = requests.get(url, stream=True)
with open(local_filename, 'wb') as f:
    for chunk in req.iter_content(chunk_size=1024):
        if chunk:
            f.write(chunk)
            f.flush()

gzip文件的问题在于它们会被请求自动解码,因此我在磁盘上获得解压缩的文件,而我需要原始文件。

有没有办法告诉请求不要这样做?

2 个答案:

答案 0 :(得分:5)

正如上面的评论中所讨论的,这似乎解决了这个问题:

来自the docs for the requests module

  

请求会自动解压缩gzip编码的响应...如果需要,您可以直接访问原始响应(甚至是套接字)。

在文档中搜索“原始回复”会产生requests.Response.raw,这会给出原始响应流的file表示。

答案 1 :(得分:3)

import requests

r = requests.get(url, stream=True)
with open(local_filename, 'wb') as f:
    for chunk in r.raw.stream(1024, decode_content=False):
        if chunk:
            f.write(chunk)

这样,您将避免对gzip编码的响应进行自动解压缩,将其从Web服务器接收到的文件逐块保存到文件中。