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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2010, 11:23   #1
alexplato
Пользователь
 
Аватар для alexplato
 
Регистрация: 14.11.2010
Сообщений: 47
По умолчанию WebBrowser теряет все куки

Простой пример. Загружаю страницу http://www.weblancer.net/ через WebBrowser. Получаю webBrowser1.Document.Cookie:


__utma=46494369.272560448.129337740 3.1293433528.1293434076.24; __utmb=46494369.1.10.1293434076; __utmz=46494369.1293377403.1.1.utmc sr=(direct)|utmccn=(direct)|utmcmd= (none); __utmc=46494369


Теперь загружаю эту же страницу через HttpWebRequest и получаю следующие cookie:


Cookie:SESSION_ID=q82v4cukl7a7qgi3r a0jebjrs3


Я не пойму в чем прикол? Мне просто нужно сделать возможность авторизации пользователя на сайте через WebBrowser, а потом использование куков в HttpWebRequest для дальнейшей работы со страницами в виде залогиненного пользователя. Подскажите в чем здесь проблема и как найти рабочее решение?

p.s. как вы поняли в текущей ситуации нет смысла передавать куки webbrowser в HttpWebRequest , поскольку теряется сессия.
Автоматизация получения заказов для ВСЕХ ФРИлансеров!
alexplato вне форума Ответить с цитированием
Старый 27.12.2010, 18:24   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Используй CookieCollection. Я делал его глобальным (мне так удобней). После этого логинился, записывал куки. Потом использовал. Пример:
Код:
//Глобальный контейнер
private CookieCollection Cooks = new CookieCollection();
//Логинимся
String LogInAndGetCookies()
        {
            String sCookie = String.Empty;
           
            Stream f1 = null;
            try
            {
                f1 = new FileStream("Conf.id", FileMode.Open);
            }
            catch (FileNotFoundException exc)
            {
                MessageBox.Show("File Conf Not Found");
            }

            StreamReader f2 = new StreamReader(f1);
            string Log;
            Log = f2.ReadLine();
            string pas = f2.ReadLine();
            f2.Close();
            String content = "  ";
            String link = @"  ";
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(link);
            #region готовим вебреквест
            req.UserAgent = "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.5.22 Version/10.51";
            req.ContentType = "application/x-www-form-urlencoded";
            req.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
            req.Headers.Add("Accept-Language", "ru-RU,ru;q=0.9,en;q=0.8");
            req.Headers.Add("Accept-Charset", "iso-8859-1, utf-8, utf-16, *;q=0.1");
            req.Headers.Add("Accept-Encoding", "deflate, gzip, x-gzip, identity, *;q=0");
            req.ProtocolVersion = new Version(1, 0);
            req.Method = "POST";
            req.KeepAlive = true;
            req.Referer = (@"http://www..ru"); // Откуда пришел пользователь
            req.AllowAutoRedirect = false;
            #endregion готовим вебреквест
            req.CookieContainer = new CookieContainer();
            Byte[] paramString = System.Text.Encoding.Default.GetBytes(content);
            using (System.IO.Stream reqst = req.GetRequestStream())
                reqst.Write(paramString, 0, paramString.Length);
            // отправляем запрос, получаем ответ
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

            resp.Cookies = req.CookieContainer.GetCookies(req.RequestUri);
            if (resp.StatusCode == HttpStatusCode.Redirect)
                sCookie = (String.IsNullOrEmpty(resp.Headers["Set-Cookie"])) ? "" : resp.Headers["Set-Cookie"];
            
            if (resp.Cookies != null)
            {
                // Добавляем сессию в наш контейнер для дальнейшего использования
                Cooks.Add(resp.Cookies);
            }
            else
            {
                MessageBox.Show("Облом");
            }
            req.GetResponse().GetResponseStream().Close();
            
            return sCookie;
        }
//Используем,например,так:
 public void Pic()
        {
            String link = @"http://...man1_thumb.png";
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(link);
            httpWebRequest.AllowAutoRedirect = true;
            httpWebRequest.CookieContainer = new CookieContainer();
            if (Cooks != null)
            {
                //Добавляем к нашему запросу ранее сохраненную сессию
                httpWebRequest.CookieContainer.Add(Cooks);
            }
            HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            httpWebResponse.Cookies = httpWebRequest.CookieContainer.GetCookies(httpWebRequest.RequestUri);
            
            Stream stream = httpWebResponse.GetResponseStream();
            const int size = 4096;
            byte[] bytes = new byte[4096];
            int numBytes;
            using (FileStream fileStream = new FileStream("ava.png", FileMode.Create, FileAccess.Write))
                while ((numBytes = stream.Read(bytes, 0, size)) > 0)
                    fileStream.Write(bytes, 0, numBytes);
            pictureBox1.Image = new Bitmap("ava.png");
            httpWebRequest.GetResponse().GetResponseStream().Close();
        }
Ну как-то так..))
Не давай организму поблажки, каждый день тренируй его в шашки..

Последний раз редактировалось Скарам; 27.12.2010 в 18:27.
Скарам вне форума Ответить с цитированием
Старый 28.12.2010, 08:58   #3
alexplato
Пользователь
 
Аватар для alexplato
 
Регистрация: 14.11.2010
Сообщений: 47
По умолчанию

Объясняю: в вашем примере в логинитесь через HttpWebRequest. Такая реализация совершенно неудобна для пользователя, которому в этом случае необходимо изначально исследовать механизм авторизации (например искать необходимые для передачи POST данные) и соответственно настраивать HttpWebRequest. Я же использую WebBrowser для того чтобы пользователь мог залогиниться на сайте как обычно, а уже затем моя программа использовала cookie залогиненного пользователя, чтобы автоматически совершать действия на сайте.
Автоматизация получения заказов для ВСЕХ ФРИлансеров!
alexplato вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
webbrowser и куки doromones Работа с сетью в Delphi 0 15.12.2010 18:08
Не удается получить все куки kakawkin Работа с сетью в Delphi 2 09.10.2010 00:13
WebBrowser и IdHTTP связать КУКИ? alexpro2004 Работа с сетью в Delphi 3 20.11.2009 10:15
Как удалить кэш и куки в webbrowser OkeaH Работа с сетью в Delphi 2 15.02.2009 16:58