Elixir - Преобразование сжатого gzip и закодированного в base64 API-ответа в строку - PullRequest
0 голосов
/ 27 апреля 2018

Мне пришлось создать клиент 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, и я получаю двоичный файл, который я не уверен, как превратить в строку, но так как в документах указано, что она была сжата, и все, что я считал необходимым для распаковки данные. Я попытался преобразовать двоичный файл в строку, используя другие методы, которые я нашел, но безрезультатно.

1 Ответ

0 голосов
/ 27 апреля 2018

Я попробовал ввод, и :zlib.unzip/1 работает.

...