No automatic handling for Accept-Encoding gzip, deflate?
我正在使用urllib.request。 如果我将Accept-Encoding设置为gizp, deflate,则返回的数据是压缩流,节省的流量为60%到80%。 是否有自动解压缩数据的选项,还是我必须自己处理? 如果是后者,有什么适合使用的工具?
我建议从urllib切换到requests。 它会自动处理gziped数据。
一个例子:
1 2 3
| >>> 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编码下载的:
1 2
| >>> 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。 在不正确的抽象中"投入太多"通常会导致更快的成本。