使用 WININET API 处理 GZIP 压缩

nim*_*ish 3 c com winapi ole wininet

我的服务器向我发送了一个使用 GZIP 压缩进行压缩的 JSON 数据流。

当我在普通 IE 浏览器上请求这些数据时,我会得到数据,当我提到要打开的应用程序时,浏览器会自动解压缩该数据流并显示我的 JSON 数据。

我的 C 应用程序使用 COM/OLE 嵌入 IE 浏览器实例,我使用 WININET 进行 GET/POST 操作,所以在这里我压缩了数据。

由于它的 IE 浏览器功能可以在默认 IE 浏览器的情况下自动解压缩 GZIP 数据如何在我的 C 应用程序中通过 WININET 自动解密数据?

Rom*_* R. 5

启动 Vista,INTERNET_OPTION_HTTP_DECODINGflag 在 WinInet 中启用 gzip 解码:

INTERNET_OPTION_HTTP_DECODING

使 WinINet 能够对 gzip 和 deflate 编码方案执行解码。有关更多信息,请参阅内容编码

当解码失败时,应用程序有两种选择:它可以删除 Accept-Encoding 标头并重新发送请求,或者它可以将请求上的 INTERNET_OPTION_HTTP_DECODING 选项设置为 false 然后重新发送请求。如果解码选项设置为 false,则应用程序必须检查 Content-Encoding 标头并在应用程序级别执行任何解码。

在早期版本的 Windows 中,您必须自己解压(使用http://zlib.net/也相当容易)