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 ライブラリを使用した簡単なテストでは、コンテンツを unzip できました。したがって、これはオプションかもしれません。これが私がしなければならないことである場合、それを検出するための最良の方法は gzip です。BINDSTATUS_MIMETYPEAVAILABLE で OnProgress イベントが発生し、テキストが "application/x-gzip-compressed" に設定されていることに気付きました。これは私がそれを検出する方法ですか?
この問題を回避するための解決策を探しています! 私は URLOpenPullStream を使い続けたいと思っています。これはリリースされた製品であり、変更を最小限に抑えたいと考えています。