Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/43: Рейтинг темы: голосов - 43, средняя оценка - 4.72
2 / 2 / 0
Регистрация: 30.10.2012
Сообщений: 8
1

Авторизация на сайте и получение данных из личного кабинета на сайте

30.10.2012, 06:51. Показов 8575. Ответов 8
Метки нет (Все метки)

В общем, проштудировав три справочника за неделю и полазав в интернете, кроме как опухнувшего мозга ничего не получил..
В общем, есть программа WindowsFormApp... Есть сайт провайдера интернета. На сайте можно авторизироваться и зайти в личный кабинет. В форме авторизации в окошке "Номер договора" автоматически выставляется номер договора в соответствии с выданным маршрутизатором IP для компа. В окошко "Пароль" требуется ввести пароль, который будет храниться в какой-либо переменной и войти в этот самый личный кабинет.
Как такового отображения того, что на сайте есть, мне не нужно. Нужно, чтобы программа зашла в личный кабинет и скопировала таблицу с информацией (там указан баланс, тарифный план, подключенные опции) в файл для дальнейшей работы с этой информацией.

Вот исходный код самой формы:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<form method="post">
            <table align="center">
            <tbody><tr>
                <td>Договор №: </td>
                <td><input type="text" name="login" value="32995101"></td>
            </tr>
            <tr>
                <td>Пароль*: </td>
                <td><input type="password" name="pas"></td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input type="submit" value="Войти" name="login_btn"></td>
            </tr>
            </tbody></table>
            </form>
Помогите разобраться как это осуществить. На форуме искал - не разобрался.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2012, 06:51
Ответы с готовыми решениями:

Авторизация на сайте и получение html кода страницы
Доброго всем времени суток! У меня возникла одна проблема в написании кода. Может, кто-то сможет...

Создание личного кабинета
Задача следующая, надо создать личный кабинет для пользователя, что бы когда он редактировал...

Получение данных введенных в форму на сайте
Вообщем есть идея: написать программу которая будет работать подобно вирусу (без окна, запускаться...

Получение капчи с сайта и отправка данных в форму на сайте
Помогите начинающему программисту. Допустим нужна программа для регистрации тут. Как это...

8
Quirrorok
30.10.2012, 09:59 2
Можно на страницу с авторизацией послать POST запрос с заполненной формой.
Я бы сделал так:
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
private HttpWebResponse SentPost(string url, Dictionary<string, string> _formValues)
        {
            return SentPost(url, _formValues, new CookieContainer());
        }
 
        private HttpWebResponse SentPost(string url, Dictionary<string, string> _formValues, CookieContainer cookies)
        {
            // encode form data
            StringBuilder postString = new StringBuilder();
            bool first = true;
            foreach (KeyValuePair<string, string> pair in _formValues)
            {
                if (first)
                    first = false;
                else
                    postString.Append("&");
                postString.AppendFormat("{0}={1}", pair.Key, System.Web.HttpUtility.UrlEncode(pair.Value));
            }
            ASCIIEncoding ascii = new ASCIIEncoding();
            byte[] postBytes = ascii.GetBytes(postString.ToString());
 
            // set up request object
            HttpWebRequest request;
            try
            {
                request = WebRequest.Create(url) as HttpWebRequest;
            }
            catch (UriFormatException)
            {
                throw new ApplicationException("Invalid URL: " + url);
            }
 
            request.Method = "POST";
            request.CookieContainer = cookies;
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = postBytes.Length;
 
            // add post data to request
            Stream postStream = request.GetRequestStream();
            postStream.Write(postBytes, 0, postBytes.Length);
            postStream.Close();
 
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
 
            return response;
        }
это функции для посылки POST запроса.


Использовать так:
C#
1
2
3
4
5
6
7
8
9
10
Dictionary<string, string> data = new Dictionary<string,string>(); //посылаемые данные
            data["login"] = "login";
            data["passwrod"] = "123";
 
            HttpWebResponse auth = SentPost("AuthURL", data); // AuthURL - адрес со страницей автризации
 
            CookieContainer cookies = new CookieContainer();
            cookies.Add(auth.Cookies);
 
            HttpWebResponse data= SentPost("DataURL", data, cookies);// DataURL- адрес со страницей данных
осталось только вытянуть нужные данные
2 / 2 / 0
Регистрация: 30.10.2012
Сообщений: 8
30.10.2012, 18:22  [ТС] 3
Спасибо, попробую так сделать..

Добавлено через 5 часов 33 минуты
Нашел вариант намного короче и проще..
Для тех, кто будет искать решение такой же проблемы и наткнется на эту тему, напишу решение...

точно не знаю что из этого подключать, а что - нет, так что подключил два элемента:
C#
1
2
using System.IO;
using System.Net;
создаем элемент WebBrowser
стандартное имя webBrowser1

в событии, которое должно инициировать переход на страничку, пишем строку перехода по адресу, где находится форма авторизации:

C#
1
webBrowser1.Navigate("http://site.ru/php.php");
Для того, чтобы дождаться загрузки странички, прописываем:

C#
1
2
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
Прописать это можно либо в событии, в котором прописывали переход на страничку, либо в событии, которое будет отвечать за авторизацию. Лично у меня за переход и авторизацию отвечает одно событие, поэтому я пишу все в это в одном месте.

Далее.. У меня, как видно в шапке темы, имя поля login = login, имя поля password = pas, имя кнопки авторизации submit = login_btn.
Для ввода текста "Пользователь" в поле login, пишем:

C#
1
 webBrowser1.Document.All["login"].InnerText = "Пользователь";
точно также делаем с паролем:

C#
1
 webBrowser1.Document.All["pas"].InnerText = "ПарольПользователя";
Для нажатия кнопки авторизации пишем:

C#
1
 webBrowser1.Document.All["login_btn"].InvokeMember("click");
готово.

Теперь останется только вывести значение webBrowser1 в текстовый файл и работать с текстом.


В итоге, вместо большого кода на целую страничку получается код на несколько строчек. Да, согласен, что это дубовый метод, а не красивый сложный код.. Но согласитесь, что пока кто-то из кусочков ручной работы собирает биту, другой ее просто вырежет из цельного куска дерева.. это будет не так красиво, но зато действенно..
0
0 / 0 / 1
Регистрация: 18.04.2013
Сообщений: 29
09.09.2013, 17:44 4
Пожалуйста, помогите... делаю по вашему примеру.. ссылка на сайт, где хочу зарегистрироваться https://www.niks.by/manage.php... у меня возникает ошибка... никак не могу с ней справиться... плиз, помогите...
Вот ссылка на изображение с ошибкой
Авторизация на сайте и получение данных из личного кабинета на сайте

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 private void LoginOnSite()
        {
            string login = "Логин на сайте";
            string pass = "Пароль на сайте";
            string html = "";
 
            webBrowser.Navigate(urlMySite);
            while (webBrowser.ReadyState != WebBrowserReadyState.Complete)
                Application.DoEvents();
            webBrowser.Document.All["LoginTxt"].InnerText = login;
            webBrowser.Document.All["PasswordTxt"].InnerText = pass;
            webBrowser.Document.All["LoginImgBtn"].InvokeMember("click");
 
 
            HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(urlMySite);
            HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
            StreamReader myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream());
 
            html += myStreamReader.ReadToEnd();
0
0 / 0 / 0
Регистрация: 11.04.2014
Сообщений: 3
11.04.2014, 11:12 5
Здравствуйте, kuklovod911! Не могли бы Вы, пожалуйста, дать исходный код этой программы, так як я только начал изучать этот язык очень сложно сориентироваться где и что писать, а курсач по вэбу поджимает... Был бы очень благодарен!!! Попробовал бы переделать под свое ТЗ.
0
2 / 2 / 0
Регистрация: 30.10.2012
Сообщений: 8
11.04.2014, 18:37  [ТС] 6
rizon0503, С тех пор столько воды утекло, этой программы уже нет давно) Какое у вас ТЗ? Может чего подскажу)

Добавлено через 2 минуты
SentRAP2009, извините, я не видел сообщения на почте о вашем ответе) Вы попробуйте сформировать просто ссылку на вход.. Обычно она выглядит примерно так:
site.ru/blablbla.php?login=name&pass=password
0
0 / 0 / 0
Регистрация: 11.04.2014
Сообщений: 3
12.04.2014, 13:03 7
Здравствуйте, kuklovod911! Спасибо, помощь никак не помешает... Вообще ТЗ такое - Есть сайт провайдера с личным кабинетом пользователя в котором отображается статическая информация по этому же пользователю. Данные передаются по протоколу HTTPS и ответ возвращаются в формате JSON. Нужно создать приложение на C# которое авторизуется и отображает на некой форме эту статистическую информацию, а потом записывает ее в базу(какую-либо). Количество залогиненых пользователей произвольное.
0
2 / 2 / 0
Регистрация: 30.10.2012
Сообщений: 8
12.04.2014, 13:23  [ТС] 8
rizon0503, ну тут много способов решений. Если дубовым методом решать (некрасивым, неправильным, но рабочим), то авторизация на сайте в скрытом окне браузера делается. Далее нужно определиться с тем, как производится авторизация на сайте. Если авторизация методом POST или GET (это пишется в коде формы авторизации, и эти методы используются почти везде), тогда все очень просто, ибо нужно либо посмотреть в браузере запрос (открыть некий отладчик, при открытом отладчике авторизировать на сайте вручную, найти запрос авторизации и посмотреть как он составлен), либо можно просто попытаться сформировать ссылку авторизации самостоятельно.
Ссылка выглядит обычно так: site.ru/blablbla.php?login=name&pass=password.
Дальше нужно вам почитать про регулярные выражения (это в любом случае нужно, ибо это очень важная и интересная тема). С помощью регулярных выражений уже можно парсить страницу.
После парсинга страницы у вас будет набор данных, с которыми можно оперировать.
На счет базы данных.. Тут нужно определиться в виде чего она будет. Либо это именно база данных (MySQL), либо это будет xml-таблица, либо вообще текстовый файлик, и от этого плясать дальше.
2
0 / 0 / 0
Регистрация: 11.04.2014
Сообщений: 3
12.04.2014, 14:28 9
kuklovod911, спасибо за наставление на путь истинный!!! Буду пробовать в этом всем разбираться....
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2014, 14:28

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Создание личного кабинета на сайте
Добрый день! Создал: регистрация, восстановление пароля, вход и выход. Подскажите как сделать ЛК!...

Достать информацию из личного кабинета на сайте
Точно не знаю, не ошибся ли я веткой. Собственно есть сайт, на котором находится личный кабинет....

Авторизация на сайте и получение данных по запросу
Доброго времени суток. Ребят подскажите. В общем делаю авторизацию на сайте, все хорошо проходит я...

БД для личного кабинета
Всем привет! Подскажите, может кто уже так делал. На сайте будет 2 группы пользователей. У каждой...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.