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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2010, 18:04   #1
LT.
The IT Crowd
Пользователь
 
Аватар для LT.
 
Регистрация: 10.10.2008
Сообщений: 41
Сообщение Работа с 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
По умолчанию

И потом дальще в 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
По умолчанию

Цитата:
Сообщение от 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
По умолчанию

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

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

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

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

Цитата:
Сообщение от 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. вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Куки 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 00:53
Куки Kinematik Работа с сетью в Delphi 0 27.12.2008 04:53
Проблема с Cookie eldar Работа с сетью в Delphi 5 21.08.2008 13:27