【问题标题】:No automatic handling for Accept-Encoding gzip, deflate? [duplicate]Accept-Encoding gzip 没有自动处理,放气? [复制]
【发布时间】:2015-07-16 03:02:28
【问题描述】:

我正在使用urllib.request。如果我将 Accept-Encoding 设置为 gizp, deflate,则返回的数据是压缩流,可节省 60% 到 80% 的流量。是否有自动解压缩数据的选项,还是我必须自己处理?如果是后者,使用哪些合适的工具?

【问题讨论】:

    标签: python-3.x urllib python-3.4


    【解决方案1】:

    我建议从urllib 切换到requests。它会自动handles gziped data

    一个例子:

    >>> r = requests.get('https://api.github.com/events')
    >>> r.text
    u'[{"id":"2978193412","type":"PushEvent","actor":{"id":13182197,"login":"ClothoWong","gravatar_id":"","url":"https://api.github.com/users/...
    

    (为简洁起见)

    在上面,您看到了一些漂亮的 JSON,但它实际上是使用 GZIP 编码下载的:

    >>> r.raw.getheaders()['Content-Encoding']
    'gzip'
    

    (您还可以通过您喜欢的浏览器开发工具确认端点以 gzip 编码响应。)

    在我看来,requests 是比urllib 更好的选择,无论如何。你最终会得到更少、更简单的代码来做同样的事情。

    【讨论】:

    • 感谢您的提示。但是我在当前项目中对urllib 的投入太大了。将考虑requests 进行新工作。我的问题的答案是:zlib.decompress(gizppedContent, 16+zlib.MAX_WBITS).
    • @OldGeezer 你现在可以切换了。 requests 可用于任何新工作发送请求(包括当前未完成的任务),旧工作可以单独放置,直到需要更改。也就是说,requests 使用起来更加直观和简单,您真的应该权衡继续使用urllib 的成本与增加requests 的成本。我想你会发现你很快就会花更多的时间来尝试找出urllib,而不是学习requests。在不恰当的抽象上“投入过多”通常最终会很快花费更多。
    猜你喜欢
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    相关资源
    最近更新 更多