Отправка массива байт через WebRequest method="POST" - C#
Формулировка задачи:
Уже голова кругом от мыслей что правда , что домыслы. Значит моя точка зрения или в чем я вижу проблему :
Чем отличается отправка данных через POST и GET , тем что в 1 случае она скрытая , а во втором в открытом виде.И на этом список самых очевидных отличий заканчивается. Что бы отправить данные по методу POST , нужно сформировать такую же строку запроса что и если бы мы делали для GET.Затем , скажем в UTF-8 , записать байты строки в POST - поток. Ну для большей ясности кусок из моего проекта:
А теперь проблема : все что я записываю в поток (я так думаю , конечно , не утверждаю) это байты представляющие строку запроса , которая содержит некоторую метаинформацию(кодировку) и сами передаваемые данные. Если записать HashBytes= , а затем просто записать байты хеша , все-таки есть же вероятность что некоторые байты будут восприняты как служебные символы и появятся новые элементы и вообще всякая билеберда...И я не могу придумать что мне с этим делать. Обычно в строке браузера служебные символы , если они являются частью name=
static WebRequest CreateRequest(PostDate content) { var result = WebRequest.Create(Adress); result.Method = "POST"; //Generate content in support type var builderRequest = new StringBuilder(); foreach (var pair in content) //pair представляет строку вида name=anatoly builderRequest.Append(pair).Append('&'); //удаляем ненужный разделитель в конце builderRequest.Remove(builderRequest.Length - 1, 1); //using static System.Text.Encoding byte[] date = UTF8.GetBytes(builderRequest.ToString()); //Write content result.ContentLength = date.Length; using (var requestStream = result.GetRequestStream()) requestStream.Write(date, 0, date.Length); return result; }
value
то они замещаются специальными , там типо %23 и др.Но не прописывать же мне вручную эдакий нормализатор , есть же готовое что-то в NetFrameworkе на этот счет?? Вобщем если есть у кого идеи излагайте , только этот пост - запрос будет разбирать php-скрипт. И как задавать кодировку передаваемых данных?
Решил отправлять сериализованый json-объект. Осталось только проблемка. Глупый json записывает байт в виде строчных цифр...То есть если один символ = 1байту , то все байты со значением выше 100 будут весить в 3 раза больше , короче говоря отправка массива данных таким образом дает не нужный прирост в весе , где-то в 2 раза. Вот если представлять байт в виде символа ASCIII , то другое дело , но некоторые байты отображаются "?" и имеют одинаковый код.Хоть изначально байты были и разные. Короче нужно найти в Unicode позицию где после нее идет 256 печатных кодов-символов и выполнять смещение изначальных байт на эту позицию , только тогда массив будет уже не бит , а целых чисел...Но не суть , объем все равно станет меньше.
Решение задачи: «Отправка массива байт через WebRequest method="POST"»
textual
Листинг программы
NameValueCollection queryString = System.Web.HttpUtility.ParseQueryString(string.Empty); queryString["key1"] = "value1"; queryString["key2"] = "value2"; return queryString.ToString(); // Returns "key1=value1&key2=value2", all URL-encoded
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д