URLOpenPullStreamとgzipコンテンツダウンロード - 必要性の非圧縮データ

StackOverflow https://stackoverflow.com/questions/4038088

質問

私が交渉し、ステータス、およびデータメッセージを処理するためにIBindStatusCallbackとIHttpNegotiateコールバックと一緒にURLOpenPullStreamを使用しています。コンテンツは、GZIP(:gzipで例えばコンテンツエンコード)であるとき、私が持っているという問題があります。私はOnDataAvailable経由で受信していたデータが圧縮されています。私は非圧縮データを必要としています。私はBINDF_PULLDATAを使用しています| BINDF_GETNEWESTVERSION |フラグを結合BINDF_NOWRITECACHE。私はそれがGZIPフォーマットをサポートすべきであると言ういくつかの記事を読みました。

私は当初、私はGZIPをしたいが、これにunsucessfulしていなかったことを指定するために受け入れエンコード要求ヘッダーを変更しようとしました。私は、変更したりBeginningTransactionにヘッダを追加し、それが受け入れ-コンテンツを変更するために失敗することができます。私は、ユーザエージェントを変更することができましたし、新しいヘッダを追加することができたので、プロセスの作品は、それが何らかの理由で受け入れ-のコンテンツを上書きしません。

他のオプションがun-gzipのデータを自分自身です。 C ++のgzipライブラリを使用して簡単なテストでは、私がコンテンツをungzipすることができました。だから、これはオプションかもしれません。これは私が何をする必要があるかであるならば、それはgzipである検出するための最良の方法は何ですか。私は、「アプリケーション/ X-gzipで圧縮された」にBINDSTATUS_MIMETYPEAVAILABLEとテキストが設定されたOnProgressイベントを得たことに気づきました。これは私がそれを検出する方法ですか?

この問題を回避するいずれかの解決策を探して!私はURLOpenPullStreamに滞在したいです。これは、最小の変更を維持するためにリリースと願いれている製品です。

役に立ちましたか?

解決

私はより多くの研究の後に自分の質問にお答えします。私が問題を抱えていることをウェブサイトではIE、FF、およびURLOpenPullStreamが有効なGZIPコンテンツとして、それを認識していない間違った何かを返しているようです。ヘッダーには、例えば、細かいように見えます。


  HTTP/1.1 200 OK
  Content-Type: text/html; charset=iso-8859-1
  Content-Encoding: none
  Server: Microsoft-IIS/6.0
  MSNSERVER: H: COL102-W41 V: 15.4.317.921 D: 2010-09-21T20:29:43
  Vary: Accept-Encoding
  Content-Encoding: gzip
  Content-Length: 4258
  Date: Wed, 27 Oct 2010 20:48:15 GMT
  Connection: keep-alive
  Set-Cookie: xidseq=4; domain=.live.com; path=/
  Set-Cookie: LD=; domain=.live.com; expires=Wed, 27-Oct-2010 19:08:15 GMT;   path=/
  Cache-Control: no-cache, no-store
  Pragma: no-cache
  Expires: -1
  Expires: -1

しかしURLOpenPullStreamは単なる生の圧縮形式でダウンロードされ、IEは、サイトにアクセスしようとすると、エラーを報告し、FFショーゴミ。

例えば、有効なGZIPコンテンツを返すないサイトでテストを行った後www.webcompression.org、その後、IE、FF、およびURLOpenPullStreamは罰金を働きました。だから、URLOpenPullStreamがサポートGZIPコンテンツを行うことが表示されます。この場合、それは透明でした。 OnDataAvailableでは、私は非圧縮データを受信し、OnResponseで、ヘッダはGZIPとしてContent-encodingを示しませんでした。

残念ながら、これはまだ私の問題を解決していませんでした。私はOnResponseイベントに応答ヘッダをチェックすることで解決しました。コンテンツのエンコーディングがGZIPだった場合、私はフラグを設定し、ダウンロードが完了したとき、その後、コンテンツを解凍するためにはzlib gzipのルーチンを使用していました。これは、仕事の罰金に見えました。通常、私はコンテンツエンコード受けることはありませんので、これは私のまれなケースのために罰金する必要があります:。URLOpenPullStreamは透過的に解凍を扱うので、OnResponseヘッダーでGZIPを

知らん:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top