Я использую 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.
Другой вариант — разархивировать данные самостоятельно. В ходе быстрого теста с использованием библиотеки gzip C++ мне удалось разархивировать содержимое. Так что, может быть, это вариант. Если это то, что мне нужно сделать, то лучший способ обнаружить это - gzip. Я заметил, что получил событие OnProgress с BINDSTATUS_MIMETYPEAVAILABLE и текстом, установленным на «application/x-gzip-compressed». Это как я должен обнаружить это?
Ищу любое решение, чтобы обойти эту проблему! Я хочу остаться с URLOpenPullStream. Это продукт, который был выпущен, и мы хотим, чтобы изменения были минимальными.