Декодировать поток GZIP в PHP из C # - PullRequest
0 голосов
/ 18 февраля 2019

У меня проблемы с расшифровкой gzip-ответа от внешнего API.Этот внешний API возвращает gziped-строку base64 назад, и у меня возникают проблемы с декодированием с помощью 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 и многие другие функции для декодирования, но безуспешно.

Я застрял здесь, так как не знаю, что делать дальше.

Это метод декомпрессии, написанный на C #, который разработчики API предоставили:

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);
    }
}

Буду признателен за любые советы или советы по решению этой проблемы.

1 Ответ

0 голосов
/ 19 февраля 2019

Любопытно, я обычно обращаюсь к ядру WordPress для обработки этих вещей, так как они получали большинство крайних случаев за годы.Но не этот.

Вместо того, чтобы пытаться перестроить этот код C #, я просто перебил несколько различных комбинаций связанных функций и смещений.

Это сделано:

var_dump( gzdecode( substr( base64_decode( $data ), 4 ) ) );

// string(128) "{"Code":412,"Value":"RegistrationSet","Route":"CN23/C_Document"}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...