我正在 Windows Phone 上开发一个应用程序,并尝试通过 HTTP GET 方法从 Web 服务器获取数据,响应中的内容编码字段表明数据是通过 deflate 算法压缩的。
我找到了有用的库 SharpZipLib,它可以用 GZipInputStream 处理 gzip 流,但它不适用于 deflate 流。
如何使用 SharpZipLib 抑制流?或者有没有其他方法可以解决这个问题?
非常感谢!
我正在 Windows Phone 上开发一个应用程序,并尝试通过 HTTP GET 方法从 Web 服务器获取数据,响应中的内容编码字段表明数据是通过 deflate 算法压缩的。
我找到了有用的库 SharpZipLib,它可以用 GZipInputStream 处理 gzip 流,但它不适用于 deflate 流。
如何使用 SharpZipLib 抑制流?或者有没有其他方法可以解决这个问题?
非常感谢!
谨防。返回 deflate 方法的 http 服务器可能会提供两种不同的东西之一。zlib-wrapped (RFC 1950) deflate (RFC 1951) 流(这是 http 标准指定的)或原始 deflate (RFC 1951) 流。后者是从没有仔细阅读标准的人编写的 Microsoft 服务器中看到的。
您可以通过两种方式尝试解决此问题(从正确的方式开始),或者不提供 deflate 作为客户端接受的方法,只允许 gzip。gzip 没有歧义。
zlib可能有一个接口允许您尝试两种方式,或者如果没有,您可能需要编写自己的接口或直接使用 zlib。在 zlib 中,您可以通过以 inflateInit(strm) 开头来解码 zlib 包装的流,或者您可以解码以 inflateInit2(strm, -15) 开头的原始 deflate 流。
不知道如何使用 SharpZipLib 来实现这一点,但您确实有另一个选择,那就是DotNetZip,它已经DeflateStream
打包好了,可以在这里使用了!
此外,AFAIK,DotNetZip 是 Ms-Pl 许可的,因此它可以用于商业应用程序,SharpZipLib (GPL) 不能!