我正在使用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文件的问题在于它们会被请求自动解码,因此我在磁盘上获得解压缩的文件,而我需要原始文件。
有没有办法告诉请求不要这样做?
答案 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服务器接收到的文件逐块保存到文件中。