当前位置:  开发笔记 > 编程语言 > 正文

在Python 3中解压缩gzip的服务器响应的最佳方法是什么?

如何解决《在Python3中解压缩gzip的服务器响应的最佳方法是什么?》经验,为你挑选了2个好方法。

我曾预料到这会起作用:

>>> import urllib.request as r
>>> import zlib
>>> r.urlopen( r.Request("http://google.com/search?q=foo", headers={"User-Agent": "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11", "Accept-Encoding": "gzip"}) ).read()
b'af0\r\n\x1f\x8b\x08...(long binary string)'
>>> zlib.decompress(_)
Traceback (most recent call last):
  File "", line 1, in 
    zlib.decompress(x)
zlib.error: Error -3 while decompressing data: incorrect header check

但事实并非如此.Dive Into Python 在这个例子中使用了StringIO,但是在Python 3中似乎缺少了.这样做的正确方法是什么?



1> u0b34a0f6ae..:

它工作正常gzip(gzip和zlib是相同的压缩但具有不同的标题/"包装".您的错误在消息中有此信息).

import gzip
import urllib.request

request = urllib.request.Request(
    "http://google.com/search?q=foo",
    headers={
        "Accept-Encoding": "gzip",
        "User-Agent": "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11", 
    })
response = urllib.request.urlopen(request)
gzipFile = gzip.GzipFile(fileobj=response)
gzipFile.read()



2> lc...:

在Python 3中,StringIOio模块中的一个类.

因此,对于您链接的示例,如果您更改:

import StringIO
compressedstream = StringIO.StringIO(compresseddata)

至:

import io
compressedstream = io.StringIO(compresseddata)

它应该工作.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有