HTTP协议中你必须知道的三种数据格式(4)

2016/12/30 15:40:56 作者:华威天下发布企业:沈阳华威天下科技有限公司[打印]

沈阳华威天下培训部总结HTTP 协议中你必须知道的三种数据格式(4)


Python 中的 zlib 库

 

python中有zlib库它可以解决gzip、deflate和zlib压缩。这三种对应的压缩方式分别是:

 

RFC 1950 (zlib compressed format)

RFC 1951 (deflate compressed format)

RFC 1952 (gzip compressed format)

 

虽说是 Python 库但是底层还是 C(C++) 来实现的,这个 http-parser 也是 C 实现的源码Nodejs 的 http-parser 也是 C 实现的源码,zlib 的 C 源码在这里()。C 真的好牛逼呀!

 

在解压缩的过程中需要选择 windowBits 参数:

 

to (de-)compress deflate format, use wbits = -zlib.MAX_WBITS

to (de-)compress zlib format, use wbits = zlib.MAX_WBITS

to (de-)compress gzip format, use wbits = zli

 

例如,解压gzip数据就可以使用ress(data, _WBITS | 16),解压deflate数据可以使用ress(data,- _WBITS)。

 

当然对于gzip文件也可以使用python的gzip包来解决,可以参考下面的代码:

 

>>> import gzip

>>> import StringIO

>>> fio = StringIO.StringIO(gzip_data)

>>> f = gzip.GzipFile(fileobj=fio)

>>> f.read()

39;test39;

>>> f.close()

 

也可以在解压的时候自动加入头检测把32加入头中就可以触发头检测,例如:

 

>>> zlib.decompress(gzip_data, zlib.MAX_WBITS|32)

39;test39;

>>> zlib.decompress(zlib_data, zlib.MAX_WBITS|32)

39;test39;

 

以上参考 stackoverflow How can I decompress a gzip stream with zlib。

 

刚接触这些东西的时候每天都会稀奇古怪的报一些错误,基本上 Google 一下都能解决。


关键字:沈阳华威,华威天下,华威科技
免责声明:以上所展示的信息由网友自行发布,内容的真实性、准确性和合法性由发布者负责。行业信息网对此不承担任何保证责任。任何单位或个人如对以上内容有权利主张(包括但不限于侵犯著作权、商业信誉等),请与我们联系并出示相关证据,我们将按国家相关法规即时移除。

其他新闻

关于我们 | 服务条款 | 网站指南 | 免责声明 | 友情链接 | 给我们留言
红盾
COPYRIGHT @ 2001-2017 CNlinfo.net ALL RIGHTS RESERVED
深圳市信息行业协会商务网站 运营商:深圳市兴讯信息技术有限公司 粤ICP备:05039908
营业执照