Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/20: Рейтинг темы: голосов - 20, средняя оценка - 4.75
3 / 3 / 1
Регистрация: 17.10.2010
Сообщений: 33
1
.NET 3.x

Работа c cookie

24.02.2011, 15:07. Показов 3797. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте уважаемые кодеры. У меня такая проблема. Я получил кукисы после запроса с авторизацией. Теперь мне надо привинтить их к другому запросу. Уже запарился гуглить, но все равно ничего не понимаю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.02.2011, 15:07
Ответы с готовыми решениями:

Работа с cookie
Нужно сделать получение куков из гет запроса и их передачу в post запрос. Здесь у меня...

Работа с cookie в библиотеке xNet
Здравствуйте. Более менее разобрался с работой HTTP через библиотеку xNet, но тема с куками...

Cookie
Здраствуйте. Хотел узнать как получить данные из файла Cookie в читабельном виде. Открываю файл...

Cookie в xNet
Есть строка с куками, конкретно строка вида: Подскажите как мне засунуть их в запрос(Сразу всю...

10
179 / 175 / 14
Регистрация: 17.01.2011
Сообщений: 349
24.02.2011, 16:08 2
В чем проблема-то?
Объявляем контейнер:
C#
1
CookieContainer cookie = new CookieContainer();
Пишем что-то простое, вроде:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string http(string uri)
        {
            try
            {
                HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(uri);
                httpWebRequest.CookieContainer = cookie;
                HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                StreamReader reader = new StreamReader(httpWebResponse.GetResponseStream());
                return reader.ReadToEnd();
            } 
            catch (Exception ex)
            {
                return "error";
            }
        }
И все. Выполняем первый запрос с авторизацией, её куки падают в контейнер. Затем пишем второй запрос - будут использованы уже существующие куки. По надобности можно обнулять или сохранять в другую переменную, а также редактировать и заменять.
1
3 / 3 / 1
Регистрация: 17.10.2010
Сообщений: 33
24.02.2011, 16:50  [ТС] 3
Дело том что я получал кукисы не совсем так как надо. А примерно вот так:
C#
1
2
3
4
5
6
7
8
            HttpWebRequest wrGETURL = (HttpWebRequest)System.Net.WebRequest.Create(URL);
            HttpWebResponse myHttpWebResponse = (HttpWebResponse)wrGETURL.GetResponse();
            StreamReader myStreamReadermy = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251));
            string page = myStreamReadermy.ReadToEnd();
            Regex sidregex = new Regex("sid=([a-z0-9]+); exp");
            Match ssid = sidregex.Match(headers);
            sid = ssid.Groups[1].Value;
            cook = new Cookie("remixsid", sid);
Тогда объясните как сделать так чтобы куки из перого запроса попадали в CookieContainer.
0
179 / 175 / 14
Регистрация: 17.01.2011
Сообщений: 349
24.02.2011, 16:56 4
Darkbobo, с Вконтактом что-то мутим?
Разницы между твоим и моим кодом нет, просто у тебя при каждом запросе генерируются новые куки - зачем оно тебе? Объяви в начале программы (вне функции)
C#
1
CookieContainer cookie = new CookieContainer();
А в своем коде замени
C#
1
cook = new Cookie("remixsid", sid);
на
C#
1
wrGETURL.CookieContainer = cookie;
Если надо что-то заменить в куках - редактируй переменную cookie
1
3 / 3 / 1
Регистрация: 17.10.2010
Сообщений: 33
24.02.2011, 17:27  [ТС] 5
Делаю всё как написано, но второй запрос отправляется без кукисов.
0
179 / 175 / 14
Регистрация: 17.01.2011
Сообщений: 349
24.02.2011, 17:39 6
Darkbobo, впритык не понимаю, что ты собираешься сделать - может пояснишь?
На данный момент если читать код, то получается примерно следующее:
C#
1
2
3
4
5
6
7
8
HttpWebRequest wrGETURL = (HttpWebRequest)System.Net.WebRequest.Create(URL); //Тут все понятно - отправляем и читаем запрос
HttpWebResponse myHttpWebResponse = (HttpWebResponse)wrGETURL.GetResponse();//...
StreamReader myStreamReadermy = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251));//...
string page = myStreamReadermy.ReadToEnd();//...
Regex sidregex = new Regex("sid=([a-z0-9]+); exp");//Ищем sid
Match ssid = sidregex.Match(headers);//Не очень понял, что за headers и где эта переменная объявляется? Почему не используется полученное зхначение page?
sid = ssid.Groups[1].Value;//Загоняем в переменную (так понимаю, это где то выше объявленный string)
cook = new Cookie("remixsid", sid);//Тут самое интересное: ты берешь переменную cook (которая в твоем запросе никак не участвует, хотя должна передаваться с request) и присваиваешь ей куку с одним значением (???), хотя в оригинальной куке значений больше.
Можно либо кусок кода больше, либо поясни, что хочешь получить в итоге яснее.
0
3 / 3 / 1
Регистрация: 17.10.2010
Сообщений: 33
24.02.2011, 17:42  [ТС] 7
Цитата Сообщение от Slap Посмотреть сообщение
Darkbobo, впритык не понимаю, что ты собираешься сделать - может пояснишь?
На данный момент если читать код, то получается примерно следующее:
C#
1
2
3
4
5
6
7
8
HttpWebRequest wrGETURL = (HttpWebRequest)System.Net.WebRequest.Create(URL); //Тут все понятно - отправляем и читаем запрос
HttpWebResponse myHttpWebResponse = (HttpWebResponse)wrGETURL.GetResponse();//...
StreamReader myStreamReadermy = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251));//...
string page = myStreamReadermy.ReadToEnd();//...
Regex sidregex = new Regex("sid=([a-z0-9]+); exp");//Ищем sid
Match ssid = sidregex.Match(headers);//Не очень понял, что за headers и где эта переменная объявляется? Почему не используется полученное зхначение page?
sid = ssid.Groups[1].Value;//Загоняем в переменную (так понимаю, это где то выше объявленный string)
cook = new Cookie("remixsid", sid);//Тут самое интересное: ты берешь переменную cook (которая в твоем запросе никак не участвует, хотя должна передаваться с request) и присваиваешь ей куку с одним значением (???), хотя в оригинальной куке значений больше.
Можно либо кусок кода больше, либо поясни, что хочешь получить в итоге яснее.
Я хочу просто что программа авторизировалась и например смотрела какие приложения установлены у пользавателя (не от того от кого авторизировалась а например у друга.).
Я нашел этот код инэте вообще ни чего не понимаю в кукисах.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            //создаем запрос
            HttpWebRequest wrGETURL = (HttpWebRequest)System.Net.WebRequest.Create("http://vkontakte.ru/login.php?m=1&email=" + textBox1.Text + "&pass=" + textBox2.Text);
            //выставляем значения Headers
            //Запрещаем редирект
            wrGETURL.AllowAutoRedirect = false;
            //Выставляем таймаут
            wrGETURL.Timeout = 100000;
            //получаем Headers,пришедшие в ответе
            string headers = wrGETURL.GetResponse().Headers.ToString();
            //получаем весь ответ
            HttpWebResponse myHttpWebResponse = (HttpWebResponse)wrGETURL.GetResponse();
            //записываем ответ в поток
            StreamReader myStreamReadermy = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251));
            //запихиваем ответ в строку
            string page = myStreamReadermy.ReadToEnd();
            //это регулярное выражение,которое выдирает из переменной headers(а ее мы получили выше) значение sid
            Regex sidregex = new Regex("sid=([a-z0-9]+); exp");
            Match ssid = sidregex.Match(headers);
            sid = ssid.Groups[1].Value;
            //инициализируем куки
            cook = new Cookie("remixsid", sid);
            //тоже самое,куки пишем
            cook.Domain = "vkontakte.ru";
0
179 / 175 / 14
Регистрация: 17.01.2011
Сообщений: 349
24.02.2011, 17:49 8
Darkbobo, не прокатит. Подмену кук полную и частичную пофиксили уже очень давно. Советую проверить теорию в Firefox. Поставьте расширение Add N Edit Cookies или подобное, авторизируйтесь, отредактируйте куки и попробуйте сделать что хотели.
1
3 / 3 / 1
Регистрация: 17.10.2010
Сообщений: 33
24.02.2011, 17:56  [ТС] 9
Цитата Сообщение от Slap Посмотреть сообщение
Darkbobo, не прокатит. Подмену кук полную и частичную пофиксили уже очень давно. Советую проверить теорию в Firefox. Поставьте расширение Add N Edit Cookies или подобное, авторизируйтесь, отредактируйте куки и попробуйте сделать что хотели.
Но мне не надо подменивать куки! Мне нужно просто авторизироаться и пройти на чужую страницу как через браузер.
0
179 / 175 / 14
Регистрация: 17.01.2011
Сообщений: 349
24.02.2011, 18:02 10
Darkbobo, тогда что вы вообще с куками пытаетесь что-то сделать?
Берете мой код отсюда:
Работа c cookie
И пишите в обработчике что-то вроде:
C#
1
http("тут_запрос_GET_на_авторизацию");
Не поленился, посмотрел, запрос такого вида:
http://login.vk.com/?act=login... ass=пароль

И далее как в браузере (куки уже лежат, где надо):
C#
1
string page = http("тут_ссылка_на_нужную_страницу");
Если GET запрос не подходит, переделайте под POST (там всего несколько строк)
1
3 / 3 / 1
Регистрация: 17.10.2010
Сообщений: 33
24.02.2011, 18:28  [ТС] 11
Не могли бы вы показать кусок кода. Ато я ничего понять не могу.
0
24.02.2011, 18:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.02.2011, 18:28
Помогаю со студенческими работами здесь

получить Cookie
никак не могу получить куки, в консоли пусто static string GetCookie() { string...

cookie запись и отправка
Всем привет! Требуется выполнить два запроса. При осуществлении первого запроса сервер создает...

Авторизация на сайте Cookie
Здравствуйте, мне нужно авторизоваться на сайте и далее посылать пост запросы с авторизованного...

Не могу получить cookie
Вопрос заключается в следующем: я формирую запрос static HttpWebResponse POST(string data)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru