代码之家  ›  专栏  ›  技术社区  ›  Aguxez

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

  •  1
  • Aguxez  · 技术社区  · 8 年前

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

    服务器使用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 回复  |  直到 8 年前
        1
  •  4
  •   Kabie    8 年前

    我试过输入,然后 :zlib.unzip/1 作品