【问题标题】:Downloading *.gz zipped file with python requests corrupt it使用 python 请求下载 *.gz 压缩文件会损坏它
【发布时间】:2014-08-07 06:49:09
【问题描述】:

我使用这段代码(它只是一部分)来下载 *.gz 存档。

with requests.session() as s:
    s.post(login_to_site_URL, payload)    
    load = s.get(scene, stream=True)

    with open(path_to_file, "wb") as save_command:
        for chunk in load.iter_content(chunk_size=1024, decode_unicode=False):
            if chunk:
                save_command.write(chunk)
                save_command.flush()

下载后文件的大小是我点击“另存为”下载文件时的两倍。并且文件已损坏。 文件链接为:http://www.zsrcpod.aviales.ru/modistlm/archive/tlm/geo/00000/28325/terra_77835_20140806_060059.geo.hdf.gz

文件需要登录名和密码,所以我添加了我点击链接时看到的屏幕截图:http://i.stack.imgur.com/DGqtS.jpg

似乎设置了一些选项来将此存档定义为文本。

file.header 是:

{'content-length': '58277138',
'content-encoding': 'gzip',
'set-cookie': 'cidaviales=53616c7465645f5fc8f0abdb26f7b0536784ae4e8b302410a288f1f67ccc0afd13ce067d97ba237dc27749d9957f30457f1a1d9763b03637; path=/,
 avialestime=1407386483; path=/; expires=Wed,
 05-Nov-2014 04:41:23 GMT,
ciddaviales=53616c7465645f5fc8f0abdb26f7b0536784ae4e8b302410a288f1f67ccc0afd13ce067d97ba237dc27749d9957f30457f1a1d9763b03637; domain=aviales.ru; path=/',
'accept-ranges': 'bytes',
'server': 'Apache/1.3.37 (Unix) mod_perl/1.30',
'last-modified': 'Wed, 06 Aug 2014 06:17:14 GMT',
'etag': '"21d4e63-3793d12-53e1c86a"',
'date': 'Thu, 07 Aug 2014 04:41:23 GMT',
'content-type': 'text/plain; charset=windows-1251'}

如何使用 python requests 库正确下载此文件?

【问题讨论】:

  • 可能是它自动解压gzip内容,你检查过下载的数据里面有什么吗?

标签: python gzip python-requests


【解决方案1】:

requests 似乎会自动为您解压缩内容。见here

请求会自动解压缩 gzip 编码的响应,并且不会 尽可能将响应内容解码为 un​​icode。你可以 如果需要,可以直接访问原始响应(甚至是套接字) 还有

如果 Accept-Encoding 请求标头包含 gzip,这是默认行为。您可以通过打印 s.request.headers 进行检查。为了能够获取原始数据,您应该修改此 headers 字典以排除 gzip,但是在您的情况下,解压缩的数据看起来像有效的 hdf 文件- 所以,只要用这个扩展保存它并使用它!

【讨论】:

  • 看起来你是对的。下载文件的大小与手动下载的解压文件大小相同。这是否意味着我下载了更多流量?或者请求为我下载存档然后解压缩存档?
  • @user2829863 不,你不下载更多,你下载存档数据,然后请求模块为你解包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 2015-09-10
  • 2011-01-28
  • 2021-03-31
  • 1970-01-01
相关资源
最近更新 更多