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

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

30.10.2012, 06:51. Просмотров 4792. Ответов 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>
Помогите разобраться как это осуществить. На форуме искал - не разобрался.
http://www.cyberforum.ru/csharp-net/thread663212.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2012, 06:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Авторизация на сайте и получение данных из личного кабинета на сайте (C#):

Авторизация на сайте
Друзья, приветствую! Cижу осваиваюсь в шарпе, поставили задачу: 1) при...

Авторизация на сайте
Всем привет! Каким образом можно создать простейшую авторизацию?...

Авторизация на сайте
Подскажите, пожалуйста, как правильно авторизоваться на сайте realty.dmir.pro...

Авторизация на сайте
Доброго времени суток, товарищи форумчане. Есть один сайт написанный на...

Авторизация на сайте
public class CookieAwareClient : WebClient { public...

8
Quirrorok
0 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 2
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- адрес со страницей данных
осталось только вытянуть нужные данные
0
kuklovod911
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
SentRAP2009
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
rizon0503
0 / 0 / 0
Регистрация: 11.04.2014
Сообщений: 3
11.04.2014, 11:12 #5
Здравствуйте, kuklovod911! Не могли бы Вы, пожалуйста, дать исходный код этой программы, так як я только начал изучать этот язык очень сложно сориентироваться где и что писать, а курсач по вэбу поджимает... Был бы очень благодарен!!! Попробовал бы переделать под свое ТЗ.
0
kuklovod911
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
rizon0503
0 / 0 / 0
Регистрация: 11.04.2014
Сообщений: 3
12.04.2014, 13:03 #7
Здравствуйте, kuklovod911! Спасибо, помощь никак не помешает... Вообще ТЗ такое - Есть сайт провайдера с личным кабинетом пользователя в котором отображается статическая информация по этому же пользователю. Данные передаются по протоколу HTTPS и ответ возвращаются в формате JSON. Нужно создать приложение на C# которое авторизуется и отображает на некой форме эту статистическую информацию, а потом записывает ее в базу(какую-либо). Количество залогиненых пользователей произвольное.
0
kuklovod911
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
rizon0503
0 / 0 / 0
Регистрация: 11.04.2014
Сообщений: 3
12.04.2014, 14:28 #9
kuklovod911, спасибо за наставление на путь истинный!!! Буду пробовать в этом всем разбираться....
0
12.04.2014, 14:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2014, 14:28
Привет! Вот еще темы с решениями:

Программная авторизация на сайте
Существует сайт необходимо написать программу которая будет автоматически...

Авторизация на сайте (4game)
Привет всем! Кто может помочь с исходным кодом авторизации на сайте...

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

Авторизация на FLASH сайте
Всем доброго времечка. Вопрос такой. Как авторизоваться на флэш сайте?


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

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

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