1

我正在 Windows Phone 上开发一个应用程序,并尝试通过 HTTP GET 方法从 Web 服务器获取数据,响应中的内容编码字段表明数据是通过 deflate 算法压缩的。

我找到了有用的库 SharpZipLib,它可以用 GZipInputStream 处理 gzip 流,但它不适用于 deflate 流。

如何使用 SharpZipLib 抑制流?或者有没有其他方法可以解决这个问题?

非常感谢!

4

2 回答 2

1

谨防。返回 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 流。

于 2012-03-25T17:31:41.417 回答
1

不知道如何使用 SharpZipLib 来实现这一点,但您确实有另一个选择,那就是DotNetZip,它已经DeflateStream打包好了,可以在这里使用了!

此外,AFAIK,DotNetZip 是 Ms-Pl 许可的,因此它可以用于商业应用程序,SharpZipLib (GPL) 不能!

于 2012-03-25T11:50:43.083 回答