Мне пришлось создать клиент SignalR, потому что я хотел попробовать API веб-сокетов Bittrex, все шло отлично, пока я не получил ответы от API (данные подписки, простые вызовы и т. Д.), Которые они указывали в документах * * 1003
Все ответы сжимаются сервером с использованием GZip (через «deflate» API - заголовки отсутствуют) и base64, закодированных перед передачей. Пользователи должны отменить этот процесс, чтобы получить полезную нагрузку JSON.
Я пытался использовать :zlib.(gunzip, gzip, uncompress)
просто ради этого, и они всегда возвращают ошибку, очевидно, после декодирования с помощью Base.decode64()
. Пример:
string = "jZC7DsIwDEX/xXOIEjuJ44w8tgKChgFQV36i6r+TvpAqQOAlUnR87OsW9pDgUm/zap03oOAAydrggoIbpHsL+Vo+FJwhiWWvnYyl4ATJaNOpEcEJCVGbqSYEQ4jMxDM5y5C18QvyJTMDEp2QtoiLeUguipcPpCEyTEIzGZiILXWNgrokKc9jCHTMJXC9qyr4srLVxJFLexlaWOvRcbSOXWTq5/4UDGsiY3/EvwQf7ipMTnrfm6Dpng=="
string |> Base.decode64!() |> :zlib.gunzip()
# This returns a :data_error from `:zlib`
Base.decode64!(string)
<<141, 144, 187, 14, 194, 48, 12, 69, 255, 197, 115, 136, 18, 59, 137, 227, 140,
60, 182, 2, 130, 134, 1, 80, 87, 126, 162, 234, 191, 147, 190, 144, 42, 64,
224, 37, 82, 116, 124, 236, 235, 22, 246, 144, 224, 82, 111, 243, 106, 157,
...>>
С другой стороны, он успешно декодируется с помощью Base, и я получаю двоичный файл, который я не уверен, как превратить в строку, но так как в документах указано, что она была сжата, и все, что я считал необходимым для распаковки данные. Я попытался преобразовать двоичный файл в строку, используя другие методы, которые я нашел, но безрезультатно.