Elixir - 将gzip压缩和base64编码的API响应转换为字符串

时间:2018-04-27 01:18:02

标签: elixir

我必须创建一个SignalR客户端,因为我想尝试Bittrex websockets API,一切都很顺利,直到我收到他们在docs中声明的API(订阅数据,简单调用等...)的响应:

  

所有响应都由服务器使用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 :(得分:2)

我尝试了输入,:zlib.unzip/1正常工作。