Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2016, 22:04   #1
Lolidze
Пользователь
 
Регистрация: 05.06.2016
Сообщений: 48
По умолчанию что не так с этим c#. Работа с куки

Делаю гет запрос, после чего делаю пост, нужно полученные куки с гета добавить в пост, делаю так :
Код:
 public CookieContainer next_cc = new CookieContainer();
в гет :
 request = (HttpWebRequest)WebRequest.Create(link);
...

next_cc =request.CookieContainer;
в пост:
Код:
 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url);
           
             req.Method = "POST";
              ...
             byte[] sentData = Encoding.GetEncoding(1251).GetBytes(Data);
             req.ContentLength = sentData.Length;
req.CookieContainer = next_cc;
в результате - ничего не передается, ок чуть поменял

гет:
Код:
 request = (HttpWebRequest)WebRequest.Create(link);
                request.Method = "GET";

                request.Headers["Accept-Encoding"] = "gzip,deflate";
                request.Headers["Accept-Language"] = "en-us,en";
                request.Headers["Accept-Charset"] = "iso-8859-1,*,utf-8";
                request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36";
                
                request.CookieContainer = next_cc;

                request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
                response = (HttpWebResponse)request.GetResponse();
                response.Cookies = request.CookieContainer.GetCookies(request.RequestUri);
                if (response.Cookies != null)
                {
                    next_cc.Add(response.Cookies);
                }
пост:
Код:
 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url);
           
             req.Method = "POST";
              ...
             byte[] sentData = Encoding.GetEncoding(1251).GetBytes(Data);
             req.ContentLength = sentData.Length;
req.CookieContainer = next_cc;
в результате отправляются не те куки, которые получал гет запрос (по снифферу смотрю). Ктот может подсказать, что не так ?
Lolidze вне форума Ответить с цитированием
Старый 14.08.2016, 22:18   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Я обычно использовал вебклиент с кукиконтейнером типа такого вместо HttpWebRequest напрямую.

Код:
    public class CookieAwareWebClient : WebClient
    {
        private readonly CookieContainer _cookieContainer = new CookieContainer();

        public CookieContainer CookieContainer { get { return _cookieContainer; } }

        private string _userAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36";
        public string UserAgent
        {
            get { return _userAgent; }
            set { _userAgent = value; }
        }

        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = base.GetWebRequest(address);
            if (request is HttpWebRequest)
            {
                var httpRequest = (HttpWebRequest)request;

                httpRequest.CookieContainer = _cookieContainer;
                httpRequest.UserAgent = _userAgent;

                httpRequest.ProtocolVersion = HttpVersion.Version11;

                httpRequest.Timeout = 50000;
            }
            return request;
        }

        /// <summary>
        /// Add X-Requested-With=XMLHttpRequest header to all requests (until ClearXmlHttpRequestHeader called)
        /// </summary>
        public virtual void SetXmlHttpRequestHeader()
        {
            Headers.Set("X-Requested-With", "XMLHttpRequest");
        }

        public virtual void ClearXmlHttpRequestHeader()
        {
            Headers.Remove("X-Requested-With");
        }
}
А в 4.5+ вроде бы есть HttpClient, где помимо прочего и CookieContainer уже есть сразу (только он async).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.08.2016, 17:24   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Смотрите на path у полученных кукесов
https://msdn.microsoft.com/ru-ru/lib...v=vs.110).aspx
если в Post запросе адресок, который не соответствует прописанным в кукесе домену и пути, то он просто не будет отправляться.
pu4koff вне форума Ответить с цитированием
Старый 15.08.2016, 17:32   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Да, а еще оно может (наверно баг) вообще не добавить в контейнер если в запросе пришли куки с другим адресом (домен тот же) http://stackoverflow.com/questions/2...-add-cookie-if
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с указателями на функции...C#что не так?! Serg94 Помощь студентам 0 21.04.2012 19:37
Что делать с этим процессом, WinXP Gogent Операционные системы общие вопросы 1 28.03.2012 16:31
Работа с массивом, удаление элементов, исправте что не так(очень важно) Valent22 Помощь студентам 0 29.01.2012 20:13
Plugin и все что с этим связано Mitriy Win Api 9 13.12.2007 10:53