我正在使用 URLOpenPullStream 以及 IBindStatusCallback 和 IHttpNegotiate 回调来处理协商、状态和数据消息。我遇到的问题是内容是 gzip(例如 Content-Encoding: gzip)。我通过 OnDataAvailable 接收的数据是压缩的。我需要未压缩的数据。我正在使用 BINDF_PULLDATA | BINDF_GETNEWESTVERSION | BINDF_NOWRITECACHE 绑定标志。我读过一些帖子说它应该支持 gzip 格式。
我最初尝试更改 Accept-Encoding 请求标头以指定我不想要 gzip 但没有成功。我可以在BeginningTransaction 中更改或添加标头,但无法更改Accept-Content。我能够更改 User-Agent,并且能够添加新的标头,因此该过程有效,但由于某种原因它不会覆盖 Accept-Content。
其他选择是自己解压缩数据。在使用 C++ gzip 库的快速测试中,我能够解压缩内容。所以,这可能是一种选择。如果这是我需要做的,那么检测它的最佳方法是 gzip。我注意到我收到了一个带有 BINDSTATUS_MIMETYPEAVAILABLE 的 OnProgress 事件,并且文本设置为“application/x-gzip-compressed”。这是我应该如何检测它吗?
寻找任何解决方案来解决这个问题!我确实想继续使用 URLOpenPullStream。这是一个已发布的产品,希望将更改保持在最低限度。