С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
1

Не передаются cookies (secure?) авторизация на mail.ru

19.07.2015, 18:32. Показов 2181. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот мой ужасный тестовый код. Проблема в том, что не все кукисы, которые mail.ru устанавливает, передаются. Те что secure,( не сохраняются в контейнере, я так понял, и) не передаются в следующих запросах. Проверял в fiddler2.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
public static void Main()
       {
 
           
           string url = "https://auth.mail.ru/cgi-bin/auth";           
           string Data = "Domain=mail.ru&Login=free_lsd&Password=YYY&new_auth_form=1&saveauth=1";
           CookieContainer cookies = new CookieContainer();
           string cook;
 
           //HttpWebRequest  req = (HttpWebRequest)WebRequest.Create("https://mail.ru");
           /*
           req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36";
           //req.Referer = "https://auth.mail.ru/cgi-bin/auth?from=splash";
           //req.Method = "GET";
           //req.CookieContainer = cookies;
         
           req.KeepAlive = true;
           //req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*//*;q=0.8";
           req.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
           */ 
 
           //HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
 
           HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
           req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36";
           req.Method = "POST";
           req.Timeout = 10000;
           req.Referer = "https://mail.ru/?from=logout&ref=main";
           req.ContentType = "application/x-www-form-urlencoded";
           req.CookieContainer = cookies;
           
           req.KeepAlive = true;
           req.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
           req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
           //req.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
                     
           byte[] SentData = Encoding.GetEncoding(1251).GetBytes(Data);
           req.ContentLength = SentData.Length;
           Stream SendStream = req.GetRequestStream();
           SendStream.Write(SentData, 0, SentData.Length);
           SendStream.Close();
           HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
           Stream ReceiveStream = resp.GetResponseStream();
           StreamReader sr = new StreamReader(ReceiveStream, Encoding.UTF8);
           char[] read = new char[256];
           int count = sr.Read(read, 0, 256);
           string Out = String.Empty;
           while (count > 0)
           {
               String str = new String(read, 0, count);
               Out += str;
               count = sr.Read(read, 0, 256);
           }
 
           cook = string.Empty;
           foreach (Cookie c in resp.Cookies)
           {
               cook += c + "\r\n";
           }
           Console.WriteLine(cook);
 
           //cookies = resp.CookieContainer;
           //Console.WriteLine(resp.Headers);
           StreamWriter OutFile = new StreamWriter("C:\\Users\\alex\\Desktop\\out.html");
           OutFile.Write(Out);
           OutFile.Close();
           
 
 
           //req = (HttpWebRequest)WebRequest.Create("https://auth.mail.ru/sdc?from=https%3A%2F%2Fe.mail.ru%2Fmessages%2Finbox%2F%3Fback%3D1");
           HttpWebRequest req2 = (HttpWebRequest)WebRequest.Create("https://e.mail.ru/messages/inbox/?back=1");
           req2.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36";
           req2.Referer = "https://auth.mail.ru/cgi-bin/auth?from=splash";
           req2.Method = "GET";
           req2.CookieContainer = cookies;
 
                              
           Console.WriteLine();
           //Console.Read();
 
           req2.KeepAlive = true;
           req2.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
           req2.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
           //req.Headers.Add("Accept-Encoding", "gzip, deflate, sdch");
           //req.AllowAutoRedirect = false;
           //req.Headers.Add(resp.Headers["Set-Cookie"].ToString());
 
           resp = (HttpWebResponse)req2.GetResponse();
           sr = new StreamReader(resp.GetResponseStream());
           Out = sr.ReadToEnd();
           //Console.WriteLine(Out);
           OutFile = new StreamWriter("C:\\Users\\alex\\Desktop\\out.html");
           OutFile.Write(Out);
           OutFile.Close();
 
           cook = string.Empty;
           foreach (Cookie c in resp.Cookies)
           {
               cook += c + "\r\n";
           }
           Console.WriteLine(cook);
 
           
           Console.WriteLine();
           Console.Read();
           /*
           string url = "http://mail.ru";
           HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
           HttpWebResponse response = (HttpWebResponse )request.GetResponse();
           Stream stream = response.GetResponseStream();
           StreamReader sr = new StreamReader(stream);
           string Out = sr.ReadToEnd();
           sr.Close();
           //Console.WriteLine(Out);
           //Console.Read();
           StreamWriter srOut = new StreamWriter("C:\\Users\\alex\\Desktop\\out.html");
           srOut.Write(Out);
           srOut.Close();
           return;
           */
       }
Буду благодарен за любую помощь!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.07.2015, 18:32
Ответы с готовыми решениями:

Авторизация на Яндексе: cookies не передаются от функции к функции
Делаю программу, эмитирующую работу в яндексе, по сути парсер. За основу взял исходник парсера на...

Не приходит почта с некоторых доменов через почтовый шлюз Kaspersky Secure Mail Gateway
В локальной сети организации установлен почтовый шлюз Kaspersky Secure Mail Gateway v. 1.1.0.379...

Хранить e-mail в cookies безопасно?
В куки храню сейчас только id юзера из БД, но есть необходимость выводить e-mail юзера на каждой...

Авторизация с использованием Cookies
Я вот первый раз такое делаю и не понимаю... Как вот получить куки. С помощью Fiddlera, я узнал что...

9
Администратор
Эксперт .NET
17696 / 13823 / 5313
Регистрация: 17.03.2014
Сообщений: 28,340
Записей в блоге: 1
20.07.2015, 01:18 2
young_snake, похоже это "нормальное" поведение для CookieContainer. Надо вручную добавить cookie обратно в CookieContainer после первого запроса. В твоем примере пишем между строками 42-43:
C#
1
2
3
4
foreach (Cookie cookie in resp.Cookies)
{
    cookies.Add(cookie);
}
Совет взят отсюда.
0
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
20.07.2015, 02:38 3
young_snake, зачем вообще париться с этими печеньками
моя авторизация
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
using System;
using System.Net;
using System.IO;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace Mail.ru
{
    class Program
    {
        static void Main(string[] args)
        {
            var req = (HttpWebRequest)WebRequest.Create("https://auth.mail.ru/cgi-bin/auth?rand=193312651 ");
            req.Accept= @"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
            req.Method = "POST";
            req.Headers.Add("Origin", "https://m.mail.ru");
            req.Headers.Add("Accept-Encoding", @"gzip, deflate");
            req.Headers.Add("Accept-Language", @"ru,en-US;q=0.8,en;q=0.6,uk;q=0.4");
 
 
            req.ContentType = "application/x-www-form-urlencoded";
 
            req.UserAgent = "NokiaN82/GoBrowser/1.6.86";
            req.CookieContainer = new CookieContainer();
            req.CookieContainer.Add(GetCoockie());
            req.AllowAutoRedirect = true;
 
            using (var str = req.GetRequestStream())
            {
                using (var writer=new StreamWriter(str))
                {
                    writer.WriteLine("Domain=bk.ru&Login=fallen08&Password=mailrutormoz&new_auth_form=1&saveauth=1");
 
                }
            }
            var resp = (HttpWebResponse)req.GetResponse();
 
            using (var str=new StreamReader(resp.GetResponseStream()))
            {
                var data = str.ReadToEnd();
                if(data.Contains("fail"))
                {
                    Console.WriteLine("Ошибка входа");
                    Console.WriteLine(data);
                    Console.ReadKey();
                    return;
                }
            }
 
            WebClient web = new WebClient();
          var arr=  web.DownloadData("https://e.mail.ru/messages/inbox/?back=1");
          
        
            File.WriteAllText("res.txt", Encoding.UTF8.GetString(arr));
            Process.Start("res.txt");
            Console.ReadKey();
            
 
 
 
        }
 
        static Cookie GetCoockie()
        {
            var req = (HttpWebRequest)WebRequest.Create("https://www.mail.ru");
 
            req.CookieContainer = new CookieContainer();
            var resp = (HttpWebResponse)req.GetResponse();
 
            return resp.Cookies[0];
        }
 
 
    }
}
Добавлено через 54 минуты
Выше была проблема из cookies, вот рабочий вариант

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System;
using System.Net;
using System.IO;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace Mail.ru
{
    class Program
    {
        static void Main(string[] args)
        {
            var req = (HttpWebRequest)WebRequest.Create("https://auth.mail.ru/cgi-bin/auth?rand=193312651 ");
            req.Accept= @"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
            req.Method = "POST";
            req.Headers.Add("Origin", "https://m.mail.ru");
            req.Headers.Add("Accept-Encoding", @"gzip, deflate");
            req.Headers.Add("Accept-Language", @"ru,en-US;q=0.8,en;q=0.6,uk;q=0.4");
 
 
            req.ContentType = "application/x-www-form-urlencoded";
 
            req.UserAgent = "NokiaN82/GoBrowser/1.6.86";
            req.CookieContainer = new CookieContainer();
            req.CookieContainer.Add(GetCoockie());
            req.AllowAutoRedirect = true;
 
            using (var str = req.GetRequestStream())
            {
                using (var writer=new StreamWriter(str))
                {
                    writer.WriteLine("Domain=bk.ru&Login=fallen08&Password=mailrutormoz&new_auth_form=1&saveauth=1");
 
                }
            }
            var resp = (HttpWebResponse)req.GetResponse();
 
 
 
            using (var str=new StreamReader(resp.GetResponseStream()))
            {
                var data = str.ReadToEnd();
                if(data.Contains("fail"))
                {
                    Console.WriteLine("Ошибка входа");
                    Console.WriteLine(data);
                    Console.ReadKey();
                    return;
                }
            }
 
           
        
            File.WriteAllText("res.txt", GetMail(req.CookieContainer),Encoding.UTF8);
            Process.Start("res.txt");
            Console.ReadKey();
            
 
 
 
        }
 
        static Cookie GetCoockie()
        {
            var req = (HttpWebRequest)WebRequest.Create("https://www.mail.ru");
 
            req.CookieContainer = new CookieContainer();
            var resp = (HttpWebResponse)req.GetResponse();
 
            return resp.Cookies[0];
        }
        static string GetMail(CookieContainer c)
        {
            var req = (HttpWebRequest)WebRequest.Create("https://e.mail.ru/messages/inbox/?back=1");
            req.Accept = @"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
           // req.Headers.Add("Accept-Encoding", @"gzip, deflate");
            req.Headers.Add("Accept-Language", @"ru,en-US;q=0.8,en;q=0.6,uk;q=0.4");
            req.UserAgent = "NokiaN82/GoBrowser/1.6.86";
 
            req.Method = "GET";
            req.CookieContainer = c;
          
            var resp = (HttpWebResponse)req.GetResponse();
 
            using (var str = new StreamReader(resp.GetResponseStream()))
            {
                var data = str.ReadToEnd();
                return data;
            }
        }
 
    }
}
0
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
20.07.2015, 16:04  [ТС] 4
OwenGlendower, в том то и дело, что они не добавляются(те, что secure), даже когда делаешь cookies.Add().

kypiwindy, хотелось бы разобраться все-таки почему не работает и сделать вариант с httpwebrequest. Да, я кстати не понял, где у тебя WebClient берет данные для авторизации?

Добавлено через 9 часов 3 минуты
kypiwindy, второй (исправленный) вариант, к сожалению, не работает =\
0
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
20.07.2015, 16:15 5
young_snake, Скопируйте и вставьте код полностью. И в документе вы увидите
Bash
1
<title>(3) Входящие - [email]fallen08@bk.ru[/email] - Почта Mail.Ru</title>
Из этого следует , что мы авторизовались
0
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
20.07.2015, 16:23  [ТС] 6
Нету такого, даже в сниффере выдает что:

C#
1
Location: [url]http://e.mail.ru/login?fail=1&sdc=1&page=https%3A%2F%2Fe.mail.ru%2Fmessages%2Finbox%2F%3Fback%3D1[/url]
0
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
20.07.2015, 16:47 7
young_snake, вот скрин фидлера и сама програма

https://drive.google.com/file/... sp=sharing

https://drive.google.com/file/... sp=sharing
0
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
20.07.2015, 16:59  [ТС] 8
kypiwindy, да, программа отлично работает. Странно, почему у меня тогда нет? Я тупо копирую, собираю, но у меня не авторизируется. Какая у вас студия и версия фреймворка?
0
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
20.07.2015, 17:05 9
Лучший ответ Сообщение было отмечено young_snake как решение

Решение

young_snake, я думаю это не важно. У меня 2015 VS, Framework 4.5.2
Вот весь проектhttps://drive.google.com/file/... sp=sharing
1
7 / 7 / 2
Регистрация: 26.12.2011
Сообщений: 269
20.07.2015, 19:08  [ТС] 10
У меня 2008-я студия и проект не открывается, бинарник не запускается, просит новый фреймворк. Но мне нужна совместимость со старыми. В общем, странная ситуация, не знаю на что тут еще грешить.

Добавлено через 8 минут
kypiwindy, ладно, спасибо огромное за внимание к теме и рабочий код, буду уже смотреть в чем тут дело.

Добавлено через 1 час 49 минут
Странно, но в VS2013 заработало, (фреймворк 3.5). kypiwindy, еще раз спасибо за помощь!
0
20.07.2015, 19:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2015, 19:08
Помогаю со студенческими работами здесь

Из Cookies в Session авторизация
Здравствуйте, помогите мне пожалуйста заменить сохранение в куки на сессии! Вот код страницы:...

Авторизация через AJAX + cookies
Надо написать простую форму удалённой авторизации (логин, пароль + кнопка &quot;вход&quot;) для сайта...

Авторизация через cookies c выводом ошибок
Собственно нужно сделать маленький блок авторизации, который в последствии можно разместить в любом...

The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) enc
При попытке подключение к SQL возникла ошибка:The driver could not establish a secure connection to...


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

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