【发布时间】:2019-07-12 06:19:28
【问题描述】:
我在解码来自外部 API 的 gzip 响应时遇到了一些问题。这个外部 API 返回一个 base64 gziped 字符串,我在用 PHP 解码时遇到问题。
这是来自 API 的响应标头:
< Content-Length: 148
< Content-Type: application/json
< Content-Encoding: gzip
< Expires: -1
< Server: Microsoft-IIS/7.5
现在这是我从 API 获得的正文:
gAAAAB+LCAAAAAAABAA9jM0KQEAURs+zzFrJz8p2rC0oWwlJMVOMlby7L8nu9J177oXB4hmZRAU5CSmRuKVn5fx2Qy2aWTgI7HJB7HE02oN89N54FeFvLJW+ZcSijlJ2kN/k3dvcPFC95lSAAAAAgAAAAB+LCAAAAAAABAA9jM0KQEAURs+zzFrJz8p2rC0oWwlJMVOMlby7L8nu9J177oXB4hmZRAU5CSmRuKVn5fx2Qy2aWTgI7HJB7HE02oN89N54FeFvLJW+ZcSijlJ2kN/k3dvcPFC95lSAAAAAgAAAAB+LCAAAAAAABAA9jM0KQEAURs+zzFrJz8p2rC0oWwlJMVOMlby7L8nu9J177oXB4hmZRAU5CSmRuKVn5fx2Qy2aWTgI7HJB7HE02oN89N54FeFvLJW+ZcSijlJ2kN/k3dvcPFC95lSAAAAA
我怀疑这是base64字符串,所以当我解码它时,我得到了这个:
8000 0000 1f8b 0800 0000 0000 0400 3d8c
cd0a 4040 1446 cfb3 cc5a c9cf ca76 ac2d
285b 0949 3153 8c95 bcbb 2fc9 eef4 9d7b
ee85 c1e2 1999 4405 3909 2991 b8a5 67e5
fc76 432d 9a59 3808 ec72 41ec 7134 da83
7cf4 de78 15e1 6f2c 95be 65c4 a28e 5276
90df e4dd dbdc 3c50 bde6 5480 0000 00
问题是,我不知道如何进一步解码。我尝试了gzdecode、zlib_decode 和许多其他功能来解码,但没有成功。
我被困在这里,因为我不知道下一步是什么。
这是API开发者提供的用C#编写的解压方法:
private string Decompress(string aValue)
{
byte[] gzBuffer = Convert.FromBase64String(aValue);
using (MemoryStream ms = new MemoryStream())
{
int msgLength = BitConverter.ToInt32(gzBuffer, 0);
ms.Write(gzBuffer, 4, gzBuffer.Length - 4);
byte[] buffer = new byte[msgLength];
ms.Position = 0;
using (System.IO.Compression.GZipStream zip = new System.IO.Compression.GZipStream(ms, System.IO.Compression.CompressionMode.Decompress))
{
zip.Read(buffer, 0, buffer.Length);
}
return System.Text.Encoding.Unicode.GetString(buffer, 0, buffer.Length);
}
}
如果有任何解决此问题的指导或提示,我将不胜感激。
【问题讨论】: