Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
67 / 67 / 72
Регистрация: 10.04.2015
Сообщений: 281

Авторизация на сайте. POST - запрос

29.10.2015, 08:33. Показов 3536. Ответов 5

Студворк — интернет-сервис помощи студентам
Миллион тем было, миллион тем будет.
Ниже процедура и 2 вызова.
для LDS - работает, для Life - получаю в response - 403 Forbidden.
Из-за id_msisdn_code (063/073/093) POST-запрос меняется, но как меняется?
И какие параметры брать для передачи, которые подписаны name? (msisdn и super_password соответственно)

Есть у кого-то предложения по этому поводу?

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
static string CheckBySite(string site_name,  string login, 
                                  string pass,       string login_style, 
                                  string pass_style, string wordtofind, 
                                  string companyname,int afterword, int count) 
        {
            String secondStepForm3 = login_style+login+pass_style+pass;
            HttpWebRequest request3 = (HttpWebRequest)WebRequest.Create(site_name);
            request3.UserAgent = ".NET Framework Test Client";// "Opera/9.80";
            request3.Method = "POST";
            request3.ContentType = "application/x-www-form-urlencoded";
            byte[] EncodedPostParams3 = Encoding.Default.GetBytes(secondStepForm3);
            request3.ContentLength = EncodedPostParams3.Length;
            request3.GetRequestStream().Write(EncodedPostParams3, 0, EncodedPostParams3.Length);
            request3.GetRequestStream().Close();
   
            HttpWebResponse response = (HttpWebResponse)request3.GetResponse();
            
 
            string lol = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("KOI8-R")).ReadToEnd();
 
            int pos = lol.IndexOf(wordtofind); //если слово "Баланс есть на странице - мы авторизовались".
            if (pos != -1)
            {
                string test = lol.Substring(pos + afterword, count); //грубо говоря получили 6-значное число. Если упадёт до 5 значного заберёт одну кавычку.
                test = test.Replace('.', ','); //заменим точку на запятую для работы с числами.
                double numVal = Double.Parse(test) / 2; // для перевода в гривны делим на 2.
                lol = companyname + ": " + numVal.ToString() + " грн.";
            }
            else
                lol = companyname + " :Something wrong with site!"; 
 
            return lol;
        }
Вызов 1(работает):
C#
1
2
3
4
5
6
7
8
9
string lds_site = "https://stat.lds.net.ua";
            string lds_login = "login";
            string lds_pass = "pass";
            string lds_login_style = "username=";
            string lds_pass_style = "&userpass=";
            string lds_word_to_find = "Баланс";
            int    lds_after_word_sym = 277;
            int    lds_balans_length = 6;
            lds_result = CheckBySite(lds_site, lds_login, lds_pass,lds_login_style,lds_pass_style,lds_word_to_find, "LDS",lds_after_word_sym,lds_balans_length);
Вызов 2(не работает):
C#
1
2
3
4
5
6
7
8
9
10
11
12
tring life_site = "https://my.life.ua/ru/";
            string life_login = "number";
            string life_pass = "password";
            string life_login_style = "id_msisdn_code=063&id_msisdn="; //суть здесь
            string life_pass_style = "&super_password=";
            string life_word_to_find = "07.11.2014"; // дата регистрации, пофиг
            int life_after_word_sym = 277;
            int life_balans_length = 7;
            life_result = CheckBySite(life_site, life_login, 
                                     life_pass, life_login_style, 
                                     life_pass_style, life_word_to_find, "LIFE", 
                                     life_after_word_sym, life_balans_length);
Исходный код страницы 1 вызова(урезан до нужной части).
Кликните здесь для просмотра всего текста

HTML5
1
2
<tr><td class="form-legend-auth">Логин или лицевой счет</td><td><input type="text" name="username" id="username" value="" style="width:150px" class="nt-input"></td></tr>
        <tr><td class="form-legend-auth">Ваш пароль</td><td><input type="password" name="userpass" id="userpass" style="width:150px" class="nt-input"></td></tr>

Исходный код страницы 2 вызова(урезан до нужной части):
Кликните здесь для просмотра всего текста

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  <td>Введите ваш номер:</td>
              <td>
                <div class="phone-section">
                <select id="id_msisdn_code" name="msisdn_code" class="phone-select">
                  
                  <option value="063" >063</option>
                  
                  <option value="073" >073</option>
                  
                  <option value="093" >093</option>
                  
                </select>
                <input autocomplete="off" name="msisdn" maxlength="7" type="text" class="needValid" id="id_msisdn" />
                
                
                </div>
              </td>
            </tr>
            <tr>
              <td><label for="id_super_password">Введите Суперпароль:</label></td>
              <td>
                <div class="passwoard-section">
                  <input id="id_super_password" type="password" class="needValid noText-valid min6 password-valid" name="super_password" maxlength="6" />
                  <a href="javascript:void(0);" class="info-link">


Добавлено через 2 часа 12 минут
Параметры(2 вызов):
csrfmiddlewaretoken:"uRBEi8SbII2CSzVXMfP SIN7UiOALrovS"
msisdn_code:"063"
msisdn:"3335566"
super_password:"879645"

Ответ 2 вызов:
Кликните здесь для просмотра всего текста

<td>Введите ваш номер:</td>
<td>
<div class="phone-section">
<select id="id_msisdn_code" name="msisdn_code" class="phone-select">

<option value="063" selected="selected">063</option>

<option value="073" >073</option>

<option value="093" >093</option>

</select>
<input autocomplete="off" name="msisdn" maxlength="7" type="text" class="needValid" value="3335566" id="id_msisdn" />


</div>
</td>
</tr>
<tr>
<td><label for="id_super_password">Введите Суперпароль:</label></td>
<td>
<div class="passwoard-section">
<input name="super_password" value="879645" class="needValid noText-valid min6 password-valid" maxlength="6" type="password" id="id_super_password" />
<a href="javascript:void(0);" class="info-link">
<span class="info-sub">
<span class="hidden-icon">&nbsp;</span>
Получить СуперПароль можно, отправив SMS с текстом PAROL на номер 123
</span>
</a>

</div>
</td>
</tr>


Добавлено через 24 минуты
======================================== ====================================
Финал:
Form Data(view parced):
Для 1 случая: username=23423423&userpass=123iop
Для 2 случая: csrfmiddlewaretoken=9fJjZkCexnx27y9v34pa W7dLRP1IXS2o&msisdn_code=063&msisdn=3452 312&super_password=434353

Сие чудо берётся с Куки:
Cookie:csrftoken=9fJjZkCexnx27y9v34paW7d LRP1IXS2o; mylifeua-sessionid=f00a5e94ebae799253e58b9486677d 21; __utmt=1; __utma=203133709.416984635.1446028403.14 46028403.1446030470.2; __utmb=203133709.1.10.1446030470; __utmc=203133709; __utmz=203133709.1446028403.1.1.utmcsr=( direct)|utmccn=(direct)|utmcmd=(none)

Вопросы по ходу дела меняются:
Как симитировать Куки или где они получаются?

Добавлено через 31 минуту
Ну и финал этого всего:
Получил куки с помощью этого:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
   static string GetCookie( string site)
        {
            string url = site;
 
            HttpWebRequest tQ = (HttpWebRequest)HttpWebRequest.Create(url);
            tQ.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            tQ.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0";
            tQ.ContentType = "application/x-www-form-urlencoded";
            tQ.Referer = url;
            HttpWebResponse tS = (HttpWebResponse)tQ.GetResponse();
 
            string tC = tS.Headers["Set-Cookie"];
 
            Console.WriteLine(tC);
            tS.Close();
            return tC;
        }
Впихнул их в запрос: String secondStepForm3 = cookie+login_style+login+pass_style+pass ;


Итог один - Forbidden 403. Сдаюсь и надеюсь на помощь форума.

Добавлено через 17 часов 34 минуты
Жаль, наверное, слишком много букаф
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.10.2015, 08:33
Ответы с готовыми решениями:

Авторизация на сайте ппри помощи post-запроса
На сайте есть форма входа: &lt;td class=&quot;bc&quot;&gt;&lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt; &lt;tr&gt;&lt;td...

Программная авторизация на сайте, POST-запрос
Ребят, я этим никогда не интересовался, поэтому простите, если вопрос глупый. Не могу программно войти на сайт...

POST запрос, авторизация на сайте Intertelecom
Пытаю написать программу, которая проверяет остаток средств на лицевом счете, чтобы пополнять интернет вовремя. Пользуясь многочисленными...

5
67 / 67 / 72
Регистрация: 10.04.2015
Сообщений: 281
23.11.2015, 12:12  [ТС]
Update 23.11.15:

Headers - Form Data:
csrfmiddlewaretoken=2wO8mU3ZOOrR66Ou7Oaw gMjau06aMAXD&msisdn_code=063&msisdn=logi n&super_password=pass

Request Cookies:
__utma 203133709.1416894864.1447665665.14482641 89.1448269766.11 N/A N/A N/A 65
__utmb 203133709.1.10.1448269766 N/A N/A N/A 34
__utmc 203133709 N/A N/A N/A 18
__utmt 1 N/A N/A N/A 10
__utmz 203133709.1447665665.1.1.utmcsr=(direct) |utmccn=(direct)|utmcmd=(none) N/A N/A N/A 77
_ga GA1.2.992902258.1447911217 N/A N/A N/A 32
_ym_isad 1 N/A N/A N/A 12
_ym_uid 1447911218167065657 N/A N/A N/A 29
csrftoken 2wO8mU3ZOOrR66Ou7OawgMjau06aMAXD N/A N/A N/A 44
mylifeua-sessionid dc79348fcd818c2cf7e46c989369f5d3 N/A N/A N/A 53
Response Cookies
mylifeua-sessionid 91dc60045c2f75836681eccb3e91d941

Вот такое вот дело генерируется при успешной авторизации.

Ну и текущий код:
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
   string life_site = "https://my.life.ua/ru/";
            string life_login = "login";
            string life_pass = "pass";
            string life_POST_REQUEST = "&msisdn_code=063&msisdn=" + life_login + "&super_password=" + life_pass;
            string life_word_to_find = "Баланс";
            //int life_after_word_sym = 277 - life_word_to_find.Length;
CookieContainer cont = new CookieContainer();
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(life_site);
            request.CookieContainer = new CookieContainer();
 
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
 
            CookieCollection cc = new CookieCollection();
            cc = response.Cookies;
            cont.Add(cc);                               
 
            String secondStepForm3 = response.Cookies.ToString() + life_POST_REQUEST;
            HttpWebRequest request3 = (HttpWebRequest)WebRequest.Create(life_site);
            request3.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:41.0) Gecko/20100101 Firefox/41.0";
            request3.Method = "POST";
            request3.ContentType = "application/x-www-form-urlencoded";
            
            byte[] EncodedPostParams3 = Encoding.Default.GetBytes(secondStepForm3);
            request3.ContentLength = EncodedPostParams3.Length;
            request3.GetRequestStream().Write(EncodedPostParams3, 0, EncodedPostParams3.Length);
            request3.GetRequestStream().Close();
 
            HttpWebResponse response4 = (HttpWebResponse)request3.GetResponse(); //ForBidden 403 вылетает здесь.
 
 
            string data = new StreamReader(response4.GetResponseStream(), Encoding.GetEncoding("KOI8-R")).ReadToEnd();
            double sum =  ParseString(data, life_word_to_find, life_after_word_sym);
По-прежнему, дальше 403 Forbidden я не ухожу. Т.е. он считает что я не принимаю и не передаю Кукисы. не исключено что так и есть. Подскажите кто чем может.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
25.11.2015, 03:15
у тебя юзается протокол https сперва настрой его должным образом
перед запросом на сайт (life_site) выполни строчку
C#
1
ServicePointManager.ServerCertificateValidationCallback = (s, cert, chain, ssl) => true;
1
67 / 67 / 72
Регистрация: 10.04.2015
Сообщений: 281
26.11.2015, 13:55  [ТС]
Цитата Сообщение от агерон Посмотреть сообщение
у тебя юзается протокол https сперва настрой его должным образом
перед запросом на сайт (life_site) выполни строчку
C#
1
ServicePointManager.ServerCertificateValidationCallback = (s, cert, chain, ssl) => true;
Спасибо.
Предыдущий https-сайт проглотил авторизацию и без этого, но там она значительно легче.

Воспользовался http-анализером.
1.
Запрос: При первом(самом первом) входе на сайт, нет ни csrf-токена ни Cookies(логично).
Ответ(200): вернулись csrf-токен и sessionID

2. После Ввода данных(логина и пароля и нажатия "Далее"):
Запрос: csrf-токен(изменённый!) и sessionID( и независимо от меня ещё Гугл Аналитика со своими параметрами, их обязательно передавать при запросе? Если да - то как их формировать?)
Ответ:(302 - Redirect): Вернуло другой код sessionID !

3. (Продолжение редиректов)
Запрос: token тот же, sessionID из 2 ответа и ГуглАналитика.
Ответ(302): sessionID, тот же что и в запросе(3).

4.
Запрос: token и SessionID с Запроса (3).
Ответ(200): Сессия-токен, и я попадаю на ту страницу, которая нужна.

======================================== ========
Либо же, если не с нуля, то со старта сразу передаётся csrftoken(в качестве Cookie) в Get-запросе.
Как это сделать - совсем без понятия.
Не то чтобы "сделайте за меня", но я уже замахался с этим входом на сайт.
======================================== =======
И казалось бы, всё просто, но 403 Forbidden, и ни в какую.
0
67 / 67 / 72
Регистрация: 10.04.2015
Сообщений: 281
28.11.2015, 22:42  [ТС]
Авторизация прошла успешно. Спасибо Опере и HttpAnalyzer.
Проблема с получением данных, кракозябры во всех предлагаемых кодировках.

Response.CharacterSet возвращает utf-8.
C#
1
2
3
4
using (StreamReader reader = new StreamReader(wres.GetResponseStream(),Encoding.UTF8))
                    {
                        html += reader.ReadToEnd();
                    }
Кликните здесь для просмотра всего текста

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
static CookieContainer cc = new CookieContainer();
        static string[] cooks = new string[15];
        static string UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:42.0) Gecko/20100101 Firefox/42.0";
        static string host = "my.life.ua";
        static string Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        static string AcceptLanguage = "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3";
        static string Encod = "gzip, deflate";
        static string Referer = "https://my.life.ua/ru/";
        static string ContentType = "application/x-www-form-urlencoded";
 
 
        static double SendRequest(string site, string method)
        {
            ServicePointManager.ServerCertificateValidationCallback = (s, cert, chain, ssl) => true;
 
            HttpWebRequest wreq = (HttpWebRequest)WebRequest.Create(site);
            wreq.Accept = Accept;
            wreq.UserAgent = UserAgent;
            wreq.Method = method;
            wreq.CookieContainer = cc;
            wreq.Headers.Add("Accept-Language", AcceptLanguage);
            wreq.Headers.Add("Accept-Encoding", Encod);
 
            wreq.KeepAlive = true;
            if (method == "POST")
            {
                wreq.Referer = Referer;
                wreq.ContentType = ContentType;
                wreq.Host = host;
                string POST_Request = "csrfmiddlewaretoken=" + cooks[0] + "&msisdn_code=063&msisdn=login&super_password=pass";
                byte[] EncodedPostParams3 = Encoding.UTF8.GetBytes(POST_Request);
                wreq.ContentLength = EncodedPostParams3.Length;
                wreq.GetRequestStream().Write(EncodedPostParams3, 0, EncodedPostParams3.Length);
                wreq.GetRequestStream().Close();
                HttpWebResponse wres = (HttpWebResponse)wreq.GetResponse();
                string html = "";
 
                if (wres.StatusCode == HttpStatusCode.OK)
                {
                    using (StreamReader reader = new StreamReader(wres.GetResponseStream(),Encoding.UTF8))
                    {
                        html += reader.ReadToEnd();
                        html = Regex.Replace(html, "<[^>]+>", string.Empty);
                        html = html.Replace(" ", string.Empty);
                        string pattern = "\\s+";
                        string replacement = " ";
                        Regex rgx = new Regex(pattern);
                        html = rgx.Replace(html, replacement);
                        int pos = html.IndexOf("07.11.2014");
                        if (pos != -1)
                            html = html.Substring(pos + 11, 6);
                        else
                            html = "Error";
 
                        Console.WriteLine(html);
 
                    }
                    Console.ReadLine();
                }
                else if (wres.StatusCode == HttpStatusCode.Forbidden)
                {
                    //CheckByModem(life_pnum);
                    return 0;
                }
 
            }
            else
            {
                HttpWebResponse wres = (HttpWebResponse)wreq.GetResponse();
                int i = 0;
                if (wres.Cookies.Count > 1)
                {
                    foreach (Cookie cook in wres.Cookies)
                    {
                        cooks[i] += cook.Value;
                        i++;
                    }
                }
                else cooks[1] = wres.Cookies.ToString();
            }
            return 0;
        }
 
        static void Main(string[] args)
        {
            string site = "https://my.life.ua/ru/";
            SendRequest(site, "GET");
            SendRequest(site, "POST");
        }
    }

Смог получить нормальный ответ!
Оказалось, причиной успешного запуска служит HTTPAnalyzer Stand-alone для мониторинга трафика. Стоит мне её выключить и в ответ я получаю кракозябры вместо текста, включаю - и получаю ответ.

Причина в этом на все 100%. 10 раз проверил. Как это возможно?
0
67 / 67 / 72
Регистрация: 10.04.2015
Сообщений: 281
29.11.2015, 23:38  [ТС]
Цитата Сообщение от mr_mczakenberg Посмотреть сообщение
Причина в этом на все 100%. 10 раз проверил. Как это возможно?
Сам и отвечу. Благодаря тому, что Анализер еще и страницы декодит в процессе. А без него не декодит и получается каша.
Заменить ("Accept-Encoding","gzip,deflate") на ("Accept-Encoding","")


Спасибо за строчку с проверкой сертификата, SSL.

Топ можно закрывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.11.2015, 23:38
Помогаю со студенческими работами здесь

Авторизация на сайте посредством Post запроса
Авторизация на сайте по средствам Post запроса На сайте есть форма входа: &lt;form action=&quot;site.com/login.php&quot;...

Авторизация на сайте по средствам POST запроса. Как расшифровать gzip ответ?
Всем привет, кто может мне помочь или кто тоже столкнулся с похожей проблемой! Проще говоря решил я сделать программу, которая будет...

Авторизация на сайтах через WebBrowser или POST запрос
Здравствуйте, нигде не могу найти адекватное руководство как же залогинится на сайте через WebBorwser или Post запрос, все уроки показывают...

Авторизация на сайте через post запрос
Всем доброго времени суток. Я новичок в vb net (учусь кодить) недавно мне пришлось работать с post get запросами. Так вот, есть...

Авторизация на сайте через POST запрос и последующая работа с этого аккаунта
Вот допустим я могу авторизироваться на сайте через ПОСТ запрос, а как мне сделать чтобы авторизироваться и например сделать другой запрос...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru