J'utilise URLOpenPullStream avec des rappels IBindStatusCallback et IHttpNegotiate pour gérer les messages de négociation, d'état et de données. Le problème que j'ai est quand le contenu est gzip (par exemple Content-Encoding: gzip). Les données que je reçois via OnDataAvailable sont compressées. J'ai besoin des données non compressées. J'utilise BINDF_PULLDATA | BINDF_GETNEWESTVERSION | BINDF_NOWRITECACHE drapeaux de liaison. J'ai lu quelques articles qui disent qu'il devrait supporter le format gzip.Téléchargement de contenu URLOpenPullStream et gzip - besoin de données non compressées
J'ai d'abord essayé de modifier l'en-tête de requête Accept-Encoding pour indiquer que je ne voulais pas gzip mais que cela ne me convenait pas. Je peux modifier ou ajouter des en-têtes dans BeginningTransaction, mais cela ne change pas Accept-Content. J'ai été capable de changer l'User-Agent, et j'ai été capable d'ajouter un nouvel en-tête, donc le processus fonctionne, mais cela ne remplacerait pas le Contenu Accepté pour une raison quelconque.
L'autre option consiste à décompresser les données moi-même. Dans un test rapide utilisant une bibliothèque gzip C++, j'ai été capable de décompresser le contenu. Donc, cela peut être une option. Si c'est ce que je dois faire, quelle est la meilleure méthode pour le détecter est gzip. J'ai remarqué que j'ai obtenu un événement OnProgress avec BINDSTATUS_MIMETYPEAVAILABLE et le texte défini sur "application/x-gzip-compressed". Est-ce ainsi que je devrais le détecter?
Vous cherchez une solution pour contourner ce problème! Je veux rester avec URLOpenPullStream. C'est un produit qui a été publié et qui souhaite garder les changements au minimum.
Une autre mise à jour sur ce problème. Le problème a été déterminé pour être que les en-têtes avaient un Content-Encoding pour "none" et "gzip". (peut être vu ci-dessus). Le navigateur utilisait le premier "aucun", mais le contenu réel était gzip. Le serveur web n'est pas sous mon contrôle, donc malheureusement, j'ai dû détecter cette condition dans les en-têtes et faire mon propre unzip sur le contenu. – Ron