Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > Общие вопросы .NET
Регистрация

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

Ответ
 
Опции темы
Старый 23.06.2010, 18:04   #1
LT.
The IT Crowd
Пользователь
 
Аватар для LT.
 
Регистрация: 10.10.2008
Сообщений: 41
Репутация: 10
Сообщение Работа с cookie(куки), C#

Здравствуйте. Нужна помощь в работе с cookie.
Если быть точнее, как можно хранить куки и потом отправлять их(например для перехода на другую страницу)?

Код реализует у меня, пока только авторизацию с выводом куков в textBox, а также выводит html код страницы опять же в textBox2.

Вот не могу разобратся, как полученные куки отправить, чтобы в textBox3 допустим, отобразилась html страница(где я уже авторизирован) "сообщения"(ну короче как будто я перешел на другую страницу)..

Код:

private void button1_Click(object sender, EventArgs e)
        {
            StringBuilder msg = new StringBuilder(String.Empty);
            Uri st = new Uri("http://www.deviantart.com");
            string reqString = String.Format("username={0}&password={1}", username, password);
            byte[] requestData = Encoding.UTF8.GetBytes(reqString);
            CookieContainer cc = new CookieContainer();
            var request = (HttpWebRequest)WebRequest.Create(thURI);
            request.Proxy = null;
            request.CookieContainer = cc;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            using (System.IO.Stream s = request.GetRequestStream())
                s.Write(requestData, 0, requestData.Length);
            using (var response = (HttpWebResponse)request.GetResponse())
            {
                foreach (var str in cc.GetCookies(st))
                {
                    msg.Append(str);
                }
                textBox1.AppendText(msg.ToString());
                //MessageBox.Show(msg.ToString()); // Proverka
            }

            WebRequest req = WebRequest.Create("http://www.deviantart.com");
            req.Credentials = CredentialCache.DefaultCredentials;
            HttpWebResponse respons = (HttpWebResponse)req.GetResponse();
            Stream dataStream = respons.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            textBox3.AppendText(responseFromServer);
            reader.Close();
            dataStream.Close();
            respons.Close();
        }

Помогите пожалуйста. Мозгую данную проблему уже второй день.

Заранее спасибо.
LT. вне форума   Ответить с цитированием
Старый 24.06.2010, 10:36   #2
Cpluser
Участник клуба
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
Репутация: 101
По умолчанию

И потом дальще в request.CookieContainer=next_cc;
Код:

            CookieContainer next_cc = new CookieContainer();
            next_cc = request.CookieContainer;

Cpluser вне форума   Ответить с цитированием
Старый 24.06.2010, 12:07   #3
LT.
The IT Crowd
Пользователь
 
Аватар для LT.
 
Регистрация: 10.10.2008
Сообщений: 41
Репутация: 10
По умолчанию

Цитата:
Сообщение от Cpluser Посмотреть сообщение
И потом дальще в request.CookieContainer=next_cc;
Код:

            CookieContainer next_cc = new CookieContainer();
            next_cc = request.CookieContainer;

Ув. Cpluser, т.е. вот так:
Код:

private void button1_Click(object sender, EventArgs e)
        {
            StringBuilder msg = new StringBuilder(String.Empty);
            Uri st = new Uri("http://www.deviantart.com");
            string reqString = String.Format("username={0}&password={1}", username, password);
            byte[] requestData = Encoding.UTF8.GetBytes(reqString);
            CookieContainer cc = new CookieContainer();
            var request = (HttpWebRequest)WebRequest.Create(thURI);
            request.Proxy = null;
            request.CookieContainer = cc;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            CookieContainer next_cc = new CookieContainer();
            next_cc = request.CookieContainer;
            using (System.IO.Stream s = request.GetRequestStream())
                s.Write(requestData, 0, requestData.Length);
            using (var response = (HttpWebResponse)request.GetResponse())
            {
                foreach (var str in cc.GetCookies(st))
                {
                    msg.Append(str);
                }
                textBox1.AppendText(msg.ToString());
                //MessageBox.Show(msg.ToString()); // Proverka
            }

            WebRequest req = WebRequest.Create("http://www.deviantart.com");
            req.Credentials = CredentialCache.DefaultCredentials;
            HttpWebResponse respons = (HttpWebResponse)req.GetResponse();
            Stream dataStream = respons.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            string responseFromServer = reader.ReadToEnd();
            textBox3.AppendText(responseFromServer);
            reader.Close();
            dataStream.Close();
            respons.Close();
        }

И еще такой вопрос, не могу понять, почему мне не выдается код html страницы уже авторизированной? Т.е. выдается просто код, обычный главной страницы, но если просмотреть его, и сравнить с кодом авторизированной страницы, то видно, что код страницы "выпал" не тот.
Ну вот пример:
Код:

...
"overlay_sponsor":1,"user":{"symbol":"","username":""},"dwait_total":2}
</script>
<script type="text/javascript">

Это фрагмент html кода главной страницы сайта. Из которой видно, что я не авторизирован. Иначе, в поле "username" - было следующее "username":"vasya". Вот я и не могу понять, почему у меня WebRequest возвращает не авторизированную страницу, т.е. "username":""}.

Последний раз редактировалось LT.; 24.06.2010 в 12:15.
LT. вне форума   Ответить с цитированием
Старый 24.06.2010, 15:12   #4
Cpluser
Участник клуба
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
Репутация: 101
По умолчанию

Тот код нада писать уже в конце при следушем методе гет или пост!
Cpluser вне форума   Ответить с цитированием
Старый 24.06.2010, 15:18   #5
LT.
The IT Crowd
Пользователь
 
Аватар для LT.
 
Регистрация: 10.10.2008
Сообщений: 41
Репутация: 10
По умолчанию

Цитата:
Сообщение от Cpluser Посмотреть сообщение
Тот код нада писать уже в конце при следушем методе гет или пост!
OK. Понял. Спасибо, еще раз.

Cpluser, а не подскажите что делать с кодом html страницы ..
LT. вне форума   Ответить с цитированием
Старый 25.06.2010, 10:36   #6
Cpluser
Участник клуба
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
Репутация: 101
По умолчанию

Всмысле что делать?)
Cpluser вне форума   Ответить с цитированием
Старый 25.06.2010, 13:10   #7
LT.
The IT Crowd
Пользователь
 
Аватар для LT.
 
Регистрация: 10.10.2008
Сообщений: 41
Репутация: 10
По умолчанию

Цитата:
Сообщение от Cpluser Посмотреть сообщение
Всмысле что делать?)
Ну, в смысле как сделать?

Есть догадки что через GET запрос. Потому что возвращается 302 Found:


Код:

https://www.deviantart.com/users/login

POST /users/login HTTP/1.1
Host: www.deviantart.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.deviantart.com/
Cookie: куки; 
Content-Type: application/x-www-form-urlencoded
Content-Length: 73
ref=http%3A%2F%2Fwww.deviantart.com%2F&username=vasya&password=12345


HTTP/1.1 302 Found
Date: Fri, 25 Jun 2010 08:45:23 GMT
Server: Apache
Set-Cookie: куки; expires=Sun, 25-Jul-2010 08:45:23 GMT; path=/; domain=.deviantart.com
Set-Cookie: features=deleted; expires=Thu, 25-Jun-2009 08:45:22 GMT; path=/; domain=.deviantart.com
Location: http://www.deviantart.com/?loggedin=1
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 26
Connection: close
Content-Type: text/html

следовательно нужно GET запрос на Location, чтобы авторизация ДЕЙСТВИТЕЛЬНО ПРОШЛА.

Код:

http://www.deviantart.com/?loggedin=1

GET /?loggedin=1 HTTP/1.1
Host: www.deviantart.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.deviantart.com/
Cookie: куки; 

HTTP/1.1 200 OK

Вот только как это все сделать и уместить в одном коде... =(

Последний раз редактировалось LT.; 25.06.2010 в 17:37.
LT. вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Куки ilSMoKEli Работа с сетью в Delphi 1 15.06.2010 11:09
Работа с Cookie Nicker Работа с сетью в Delphi 0 09.04.2010 15:58
Работа со страницами - curl + file_get_contents + cookie domovoi PHP 6 01.03.2009 01:53
Куки Kinematik Работа с сетью в Delphi 0 27.12.2008 05:53
Проблема с Cookie eldar Работа с сетью в Delphi 5 21.08.2008 13:27


01:46.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru