Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с правильной обработкой куков 
:(
    Опции темы
nmn
Дата 30.7.2010, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



здравствуйте

проблема заключается в том что используя HttpWebRequest, HttpWebResponse и CookieContainer в последнем сохраняются не все куки, которые приходят в заголовках например получена следующая строка: 
Код

Set-Cookie: MSPRequ=lt=1280499040&co=1&id=N; path=/;version=1,MSPOK=$uuid-56a17e5c-52fe-4636-b9c7-b770ecf55aed; domain=login.live.com;path=/;version=1

а в CookieContainer ложится только MSPRequ, а MSPOK нет

как это исправить?
PM Skype   Вверх
nmn
Дата 31.7.2010, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



реально проблема :(
не знаю, может где то это и настраивается, но больше похоже на ошибку

посему приходится самому вручную обрабатывать куки

Код

static CookieCollection ParseCookies(string cookies)
        {
            Cookie c = new Cookie();
            CookieCollection cc = new CookieCollection();
            string[] stdnames = { "expires", "domain", "path", "secure", "httponly", "version" };

            Match m = Regex.Match(cookies, @"(?<name>\w+?) \s* (=\s*(?<value>(?<value1>expires)?|.*?)(;|(?(<value1>)|,)|$)|\s*$)",
                RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);


            bool first = true;
            while (m.Success)
            {
                string name = m.Groups["name"].Value, value = m.Groups["value"].Value;

                bool std = false;
                foreach (string s in stdnames)
                    if (name.ToLower() == s)
                    {
                        std = true;
                        break;
                    }

                if (!std)
                {
                    if (!first)
                    {//means that a new cookie started
                        cc.Add(c);
                        c = new Cookie();
                    }

                    first = false;
                    c.Name = name;
                    c.Value = value;
                }
                else if (name == stdnames[0])//expires
                {
                    Match em = Regex.Match(value, @"(?<day>Sun|Mon|Tue|Wed|Thu|Fri|Sat) (?<dayinmonth>\d\d)-(?<month>Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(?<year>\d\d\d\d)(?<hour>\d\d):(?<minute>\d\d):(?<second>\d\d)", RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
                    if (em.Success)
                    {
                        string[] monthsAbbr = { "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec" };

                        bool ok = true;
                        int pos = -1;
                        foreach (string s in monthsAbbr)
                            if (++pos > 0 && s == em.Groups["month"].Value.ToLower())
                                break;
                        ok |= pos >= 0 && pos < monthsAbbr.Length;

                        if (ok)
                        {
                            DateTime expires = new DateTime(int.Parse(em.Groups["year"].Value),
                                pos + 1,
                                int.Parse(em.Groups["dayinmonth"].Value),
                                int.Parse(em.Groups["hour"].Value),
                                int.Parse(em.Groups["minute"].Value),
                                int.Parse(em.Groups["second"].Value), DateTimeKind.Utc).ToLocalTime();
                            c.Expires = expires;
                        }
                    }
                    else { }//hmm, wrong expires format, omitting
                }
                else if (name == stdnames[1])//domain
                {
                    c.Domain = value.Trim();
                }
                else if (name == stdnames[2])//path
                {
                    c.Path = value.Trim();
                }
                else if (name == stdnames[3])//secure
                {
                    c.Secure = true;
                }
                else if (name == stdnames[4])//httponly
                {
                    c.HttpOnly = true;
                }
                else if (name == stdnames[5])//version
                {
                    int version;
                    if (int.TryParse(value, out version))
                        c.Version = version;
                }
                else//hmm, don't know such name, omitting it
                { }
                m = m.NextMatch();
            }
            if (!string.IsNullOrEmpty(c.Name))
                cc.Add(c);
            return cc;
        }


так нормально разбирает, но посмотрите пожалуйста, может где чего пропустил или напутал
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0740 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.