Некоторые использовали WinHttpRequest.5.1 , кто-то писал ВК.
Друзья, хватит. Вот вам решение.
Будет работать на платформе 8.3.9 + . Потому что работа с двоичными данными появилась только в них.
Многие искали ответ на этот вопрос, и тут, и на партнерском форуме, тема действительно актуальная, сейчас все работает со сжатием.
Суть метода лежала на поверхности, что такое GZIP — это формат схожих с ZIP , но отличающейся заголовочными блоками.
1) Вставляем заголовок, чтобы сервер понимал, что мы умеем принимать этот формат
Заголовки.Вставить("Accept-Encoding", "gzip");
2) Получаем ответ в виде двоичных данных
3) Вырезаем сжатое тело (Байты с 10 по ДлинаТела — 8)
4) Формируем валидные залоговоки формата ZIP файла и добавляем к нему сжатое тело (Пример формирование валидных ZIP заголовков взят отсюда //infostart.ru/public/618906/, и доработаны)
5) Извлекаем данные с использованием ЧтениеZipФайла
Во вложении готовая функция, можно копировать в проект и использовать.
Если будет советы по оптимизации и улучшению, просьба в личку.
(0)
Тема актуальная, т.к. сайт РБК «любит» отдавать курсы валют в Gzip формате, если запрашивать периодом. Никакие переданные ему ключи в заголовках на его поведение не влияют.
К сожалению у меня платформа 8.3.7. Каким-то образом в ней можно извернуться так, чтобы добавить к данным заголовок (может через прямое редактирование base64 строки)?
—
Кажется нашел как можно сделать на старых платформах, благодаря Александру Шпагину, но это работает только с deflate, а по поводу Gzip вопрос остается открытым:
Показать
(1) Говорят что формат deflate не используется сейчас веб серверами, хотя deflate = gzip без заголовков (чисто сжатые данные), для стандартизации все перешли на gzip.
(1) К сожалению вариант с ХранилищемЗначения не работает, если на вход поступает Base64 строка с чистыми Deflate данными…
Как раз совсем недавно бился над данным вопросом и временно перешел на обмен без сжатия (что так себе вариант).
Спасибо. Будем тестировать…
Кстати насчет обновления курсов валют с сайта РБК. Один и тот же запрос валюты может возвращать 10 раз несжатый траффик, а потом ему что-то в голову бьет и начинает возвращать снова в gzip.
автор, спасибо! актуально
Подскажите
это принципиально?
(8) На сколько я помню нет.
Просто подумал может тег body )), а так проверил все работает на ура. Очень нужная вещь.
Есть задача данные в формате gzip распаковывать из 1С, качнул обработину, в лоб не работает. Данные содержат заголовок gzip. Убрал заголовок, отрезал хвост в соотвествии с форматом, остались только данные deflate результирующий файл 1с не распаковывает. Файл читается 7zip и far, выдает ошибку crc, но данные достает нормально….
Может есть идеи что еще можно подшаманить ?
Автору — спасибо! Работает четко.
Работает прекрасно.
(11)
Посмотрите описание формата gzip:http://www.zlib.org/rfc-gzip.html Согласно этому описанию, за первыми 10 байтами не обязательно следует deflate. Перед deflate могут присутствовать также имя файла, комментарий и т.д. В случае gzip сжатого тела ответа HTTP они отсутствуют, т.е. за 10 байтами сразу начинается deflate, но для Вашей задачи нужен дальнейший разбор и проверка присутствия комментария, имени файла и проч.
(14) спасибо посмотрю, но пока пришлось решить через ВК.