Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вам нужно знать формат gzip и распоковать его с помощью системной функции CryptEncode(CRYPT_ARCH_ZIP)
Большое спасибо за подсказку! Действительно выгрыз из gzip содержательную часть, и удалось скормить ее функции CryptDecode(CRYPT_ARCH_ZIP).
Правда если длина упакованной части большая, то CryptDecode(CRYPT_ARCH_ZIP) криво распаковывает. Например массив длиной 685 символов распаковывает нормально, а длиной 1136 - уже криво. Причем кривота в результате как правило начинается после 3277 символа. И при этом ошибку функция не возвращает.
Ключ шифрования задаю key[] = {1, 0, 0, 0}
Правда если длина упакованной части большая, то CryptDecode(CRYPT_ARCH_ZIP) криво распаковывает. Например массив длиной 685 символов распаковывает нормально, а длиной 1136 - уже криво. Причем кривота в результате как правило начинается после 3277 символа. И при этом ошибку функция не возвращает.
Ключ шифрования задаю key[] = {1, 0, 0, 0}
Приложите тестовый скрипт, чтобы MQ могли воспроизвести.
Приложите тестовый скрипт, чтобы MQ могли воспроизвести.
Прилагаю. В результирующей строке с 3331 символа начинается нарушение формата jason. Те же самые входные данные в питоне распаковываются без ошибок:
def on_message(self, ws, message): compressed_data = gzip.GzipFile(fileobj=io.BytesIO(message), mode='rb') decompressed_data = compressed_data.read() utf8_data = decompressed_data.decode('utf-8') print(utf8_data) #this is the message you needПрилагаю. В результирующей строке с 3331 символа начинается нарушение формата jason. Те же самые входные данные в питоне распаковываются без ошибок:
Ищите ошибку на сервере или в питонской части. Конкретно приложенный бинарный массив zip[1123] разжимается методом "deflate-raw" один в один как в MQL5. Я проверял на онлайн сайтах и в браузере через JavaScript.
Может быть проблема в том, что в сетевых пакетах друг за другом идут склеенные потоки сжатых данных, что не каждый софт правильно понимает. Конкретно в JavaScript это помечается ошибкой "Junk found after end of compressed data."
Конкретно приложенный бинарный массив zip[1123] разжимается методом "deflate-raw" один в один как в MQL5. Я проверял на онлайн сайтах
Правда если длина упакованной части большая, то CryptDecode(CRYPT_ARCH_ZIP) криво распаковывает. Например массив длиной 685 символов распаковывает нормально, а длиной 1136 - уже криво. Причем кривота в результате как правило начинается после 3277 символа. И при этом ошибку функция не возвращает.
Ключ шифрования задаю key[] = {1, 0, 0, 0}
Проблема не в длине и функции CryptDecode. Я ею разжимал файлы > 500 мбайт. На сколько знаю, gzip разбивает файл на чанки и жмет их отдельными архивчиками. Возможно Вы перелители границу чанка, или не учитываете это при доступе к архиву. Возможно причина именно в этом.
Можете скинуть ссылку, на каких сайтах проверяли?
Например, здесь. Но потребуется бинарный массив сконвертировать в base64, например:
На сколько знаю, gzip разбивает файл на чанки и жмет их отдельными архивчиками. Возможно Вы перелители границу чанка, или не учитываете это при доступе к архиву
Границу определяю исходя из описания формата по последовательности 3-х символов: 0x1f 0x8b 0x08. Далее убираю 10 символов, включая эти(заголовок), и 8 символов перед следующей границей(подвал). Дополнительных заголовков нет.