Как декодировать в c# строку, сжатую PHP 'gzdecode - PullRequest
1 голос
/ 26 февраля 2020

Прежде всего: я проверил inte rnet в течение 2 дней и проверил ВСЕ доступные опции.

Но мне ничто не помогло (((*

Теперь код:

PHP Сторона:

$data = gzencode(<<HERE IS DATA>>, 9);
$post_data = array('data' => $data);
$headers = array('Content-type: multipart/form-data');
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_exec($ch);

ОБРАТИТЕ ВНИМАНИЕ: Это не скрыто для base64!

Вывод выглядит так:

úYNk™%¨e4²~ry˜¯ß5Ö¾<ИçúV£w˜«yYXÞ   j–šµ(skZBF‚’³=-7ïòu‚Jøˆ:è47š5Üç–F<ê¤Vp>]Ïbl
ÒYS¼Â”ôž²ß“­¨œTøì<ù—›×ÁËÜB´ÑAöä°%["pþkÝW–þbÜW=g§çÌF{¹é ’טà ýò°í4Á–µxMƒ<Å6Ø1¥q¡ei)}¦GY4Ëâøh[8Ü.)ÒÆaŽ
‹ã£M ‡‘|ÂrüöÜ›ïYð°Õ¨Z‰Dvçµ½Äʘ{«%ñÑÈnŠ‘BtRoñy³l³Áƒ+¼‰M¡WAΓê˺Žá(Rá.‚²#ˆšá†‚ñN dâíŒÏÃ

Сейчас

Сторона AspCore

1 опция:

Если я сохраню это "úYNk™%¨e..........." в файле (включено PHP side) by

$myfile = fopen("data.txt", "w") or die("Unable to open file!");
fwrite($myfile, $data);
fclose($myfile);

А потом я читаю этот файл AS BYTE ARRAY => Я могу расшифровать это следующим кодом:

byte[] data = File.ReadAllBytes(@"C:\wamp64\www\data.txt");             
using (var msi = new MemoryStream(data))
using (var mso = new MemoryStream())
{
    using (var gs = new GZipStream(msi, CompressionMode.Decompress))
    {
        //gs.CopyTo(mso);
        gs.CopyTo(mso);
    }

    return Encoding.UTF8.GetString(mso.ToArray());
}

Но если Я читаю тот же файл, что и строка - Это не работает!

string data_string = File.ReadAllText(@"C:\wamp64\www\newfile5.txt");
byte[] data = Encoding.UTF8.GetBytes(data_string);
using (var msi = new MemoryStream(data))
using (var mso = new MemoryStream())
{
    using (var gs = new GZipStream(msi, CompressionMode.Decompress))
    {
        //gs.CopyTo(mso);
        gs.CopyTo(mso);
    }

    return Encoding.UTF8.GetString(mso.ToArray());
}

Теперь HTTP сторона (на asp ядро)

Я читаю эти данные как:

string temp_file_name = "report_" + DateTime.UtcNow.Ticks;

                StreamWriter sw = new StreamWriter(temp_file_name);

                string _data = "";
                if (Request.Form != null && Request.Form.Keys != null)
                {
                    _data = Request.Form["data"];
                    sw.Write(_data);
                }

                sw.Close();

                string decompressed_data = "";

Я пытаюсь декодировать во время выполнения или прочитать этот файл .... та же проблема - я не могу декодировать эти данные ........

Любая идея, почему это? ???

Спасибо


Обновление (для @ADyson)

PHP Код:

<?php
$xml = 'Hello Stackoverflow!';
$compr_data = gzencode($xml, 9);
$myfile = fopen("data.txt", "w") or die("Unable to open file!");

fwrite($myfile, $compr_data);
fclose($myfile);

$post_data = array('data' => $compr_data);
$headers = array('Content-type: multipart/form-data');



$ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);



curl_setopt($ch, CURLOPT_URL, "MY ASP CORE WEB API ENDPOINT URL");
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);


$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

echo($httpCode);

?>

Результат файла ( Написано PHP)

‹     
óHÍÉÉW.ILÎÎ/K-JËÉ/W Ê×/Ü   

Код веб-API:

string temp_file_name = "stackoverflow_report_" + DateTime.UtcNow.Ticks;

                StreamWriter sw = new StreamWriter(temp_file_name);

                string _data = "";
                if (Request.Form != null && Request.Form.Keys != null)
                {
                    _data = Request.Form["data"];
                    sw.Write(_data);
                }

                sw.Close();

                string decompressed_data = "";


                try
                {
                    _logger.Warn("#1");

                    byte[] te = System.IO.File.ReadAllBytes(temp_file_name);
                    using (var msi = new MemoryStream(te))
                    using (var mso = new MemoryStream())
                    {
                        using (var gs = new GZipStream(msi, CompressionMode.Decompress))
                        {
                            //gs.CopyTo(mso);
                            gs.CopyTo(mso); <<<<<----- HERE IS ERROR
                        }

                        string res = Encoding.UTF8.GetString(mso.ToArray());
                        _logger.Warn(res);
                    }


                }
                catch(Exception ex)
                {
                    _logger.Warn(ex.Message);
                }

Сообщение об ошибке:

The archive entry was compressed using an unsupported compression method.

Файл, написанный WebAPI

�     
�H���W.IL��/K-J��/W ��/�   

Файлы разные (((ПОЧЕМУ ????

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