Отправка GZipStream в PHP не может быть дефлирована - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь опубликовать JSON, используя GZipStream для PHP, но не уверен, как его уменьшить на стороне PHP. Вот функция для сжатия:

public static string Compress( string text) {
    var buffer = Encoding.UTF8.GetBytes(text);
    var memoryStream = new MemoryStream();
    using (var stream = new GZipStream(memoryStream, CompressionMode.Compress, true)) {
        stream.Write(buffer, 0, buffer.Length);
    }
    memoryStream.Position = 0;
    var compressed = new byte[memoryStream.Length];
    memoryStream.Read(compressed, 0, compressed.Length);
    var gZipBuffer = new byte[compressed.Length + 4];
    Buffer.BlockCopy(compressed, 0, gZipBuffer, 4, compressed.Length);
    Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gZipBuffer, 0, 4);
    return Convert.ToBase64String(gZipBuffer);
}

Это называется так:

request.Headers.Add("Content-Encoding", "gzip");
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
postData = Compress(JsonConvert.SerializeObject(incomingData));
byteArray = Encoding.UTF8.GetBytes(postData);
dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();

На стороне PHP я делаю это, чтобы получить его:

<?PHP
    file_put_contents('test.txt', file_get_contents('php://input'));
    file_put_contents('test2.txt', gzuncompress('php://input'));
?>

В моем журнале ошибок Apache я получаю это:

PHP Warning:  gzdecode(): data error in /var/www/html/gzip.php on line 3

и в test.txt я получаю это:

0QAAAB+LCAAAAAAABAAdjsEKgzAQRH9lycWLlfbquVLoRWntqelhiYsGZJNuorUU/70htzcPZhj102rAiFrVz4SNiJOWOxwpGa06F+I1OO7dnWQlgQM0myEfrePEvXxB6L1QiNWF4o2CdxxStdTqTBHtHPLMKZs8nvODafNkIg1gJhRMJEBs3MKJkv1MdibwKMHyCCvOC9XQVtBhnKAoSpgtExxL8C7YfOZYabW/dvUHutMCTtEAAAA=

Я также пытался gzdecode, gzinflate, что мне делать дальше, чтобы вернуть мой JSON, чтобы я мог обработать его с помощью PHP?

UPDATE: Я пытался делать то, что предлагал Саммитч, но все равно получал ошибки. Использование этого (https://gist.github.com/magnetikonline/650e30e485c0f91f2f40) для сброса всей информации запроса обеспечивает следующее:

POST /gzip.php HTTP/1.1

HTTP headers:
Authorization: Bearer xxxx
Host: mysite.com
Expect: 100-continue

Request body:
0QAAAB+LCAAAAAAABAAdjsEKgzAQRH9lyaUXK/bqWSn0UmntqelhiYsGZJNuorUU/70htzcPZhj102rAiFrVz4StiJMrdzhSMlp1LsRLcNy7O8lKAkdoN0M+WseJe/mC0HuhEMszxRsF7zikaqFVQxHtHPLMKZs8nvODafNkIg1gJhRMJEBs3MKJkv1MdibwKMHyCCvOC9XQlNBhnOBwKGC2TFAV4F2w+UxVarW/dvUHpEHFyNEAAAA=

Я пробовал как с base64, так и без него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...