Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
19 / 19 / 4
Регистрация: 18.02.2011
Сообщений: 292
1

Разбор POST запроса, который состоит из двоичных данных

26.10.2012, 16:41. Показов 2367. Ответов 3
Метки post (Все метки)

Author24 — интернет-сервис помощи студентам
Я пишу специфическую DLL, она работает как веб-сервер. Мне нужно разобрать POST запрос, который состоит из двоичных данных. Эти данные я потом конвертирую в Base64. В итоге у меня получаются битые файлы, не могу понять почему. Ниже код, который отвечает за выше написанное. Прошу помощи, за любые ответы буду признателен!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
NameValueCollection PostParam = new NameValueCollection();
StreamReader reader = new StreamReader(request.InputStream, request.ContentEncoding);
string postData = reader.ReadToEnd();
reader.Close();
 
string conty = request.Headers["Content-Type"];
if (!String.IsNullOrEmpty(conty) && conty.Contains("multipart/form-data"))
{
    string bound = Regex.Match(conty, "(?<=boundary=)(.*?)(?=$)").Value;
    string[] postCollection = Regex.Split(postData, bound, RegexOptions.Multiline);
    foreach (string part in postCollection)
    {
        if (String.IsNullOrEmpty(part.Trim()))
            continue;
 
        // Заголовки
        string s1 = Regex.Match(part, @"Content-Disposition: (?<codisp>.*)", RegexOptions.Multiline | RegexOptions.IgnoreCase).Groups["codisp"].Value;
        string s2 = Regex.Match(part, @"Content-Type: (?<contype>.*)", RegexOptions.Multiline | RegexOptions.IgnoreCase).Groups["contype"].Value;
 
        // Из первого заголовка выделяем имя файла
        string s3 = String.Empty;
        Match m = Regex.Match(s1, @"filename=\W(?<file>.*)\W", RegexOptions.IgnoreCase);
        if (m.Success)
            s3 = m.Groups["file"].Value;
        else
            s3 = Regex.Match(s1, @"name=\W(?<name2>.*)\W", RegexOptions.IgnoreCase).Groups["name2"].Value;
        
        // Основной блок данных без заголовка
        string s5 = part;
 
        s5 = s5.Replace(bound, String.Empty);
 
        if (!String.IsNullOrEmpty(s1)) // Вырезаем s1
            s5 = s5.Replace(s1, String.Empty);
        if (!String.IsNullOrEmpty(s2)) // Вырезаем s2
            s5 = s5.Replace(s2, String.Empty);
 
        s5 = s5.Trim();
 
        // Если не пустой Content-Type и не содержит "text", значит это двоичные данные
        if (!String.IsNullOrEmpty(s2) && !s2.Contains("text"))
        {
            s5 = System.Convert.ToBase64String(Encoding.UTF8.GetBytes(s5));
        }
        else
        {
            Encoding utf8 = Encoding.UTF8;
            Encoding win1251 = request.ContentEncoding;
            byte[] utf8Bytes = win1251.GetBytes(s5);
            byte[] win1251Bytes = Encoding.Convert(utf8, win1251, utf8Bytes);
            s5 = win1251.GetString(win1251Bytes).Trim();
        }
 
        PostParam.Add(s3, s5);
    }
}
else
{
    PostParam = HttpUtility.ParseQueryString(HttpUtility.HtmlDecode(postData));
}
Добавлено через 15 часов 55 минут
Можете хотя-бы подсказать, какие поправки внести?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2012, 16:41
Ответы с готовыми решениями:

Разбор post запроса
Доброго времени суток, форумчане! если не в ту тему сделал, заранее извиняюсь. Пните в...

Разбор массива из POST запроса с формы
форма передает такой вот запрос через POST запрос. Строка запроса action kasko Данные...

Разбор данных запроса (mysqli_fetch_assoc)
Доброго времени суток! Никак не могу понять в чем ошибка? Прошу помочь тех, кто сталкивался с...

Построить типизированный файл данных, который состоит из записей
Построить типизированный файл данных, который состоит из записей с такими полями: размер кубика,...

3
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.10.2012, 20:43 2
PaZL, вангую, что проблемы с маршаллингом связанные (система добавляет лишние байты), но наверное ошибаюсь...
0
19 / 19 / 4
Регистрация: 18.02.2011
Сообщений: 292
26.10.2012, 22:02  [ТС] 3
Psilon, а как это решить? и вообще чего она это делает?
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.10.2012, 22:03 4
PaZL, я точно не знаю, тут помню человек пытался наладить взаимодействие между C# и pure C (он записывал в C структуры, в C# же выгружал), там проблема была в этой области. Мне кажется, что тут примерно то же самое.
0
26.10.2012, 22:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2012, 22:03
Помогаю со студенческими работами здесь

Как сделать тип данных или уже есть такой тип данных который состоит из всех печатыемых символов?
Как сделать тип данных или уже есть такой тип данных который состоит из всех печатыемых символов?...

Получение данных из Post запроса
Есть запрос на сервер, он благополучн проходит. Получаю ответ от сервера, но не могу его...

Вывод данных из Post запроса
Думаю темой не ошибся, подскажите почему при выводе данных из пост запроса, выводиться только...

Кодировка данных входящего POST-запроса
ко мне в скрипт прилетает POST-запрос (например, с помощью CURL-а) Как мне понять, в какой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru