Прежде всего: я проверил 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 ��/�
Файлы разные (((ПОЧЕМУ ????