Иногда нужно написать программу для работы с некими интернет ресурсами, для этого используют (почти всегда) API, но если нету API то приходится использовать тяжелую артиллерию а именно GET и POST запросы.
Это, должен вас предупредить, очень-очень-очень рутинная работа, хоть и в данной статье я покажу это на примере простой авторизации на сайте moodle моего первого учебного учреждения, где я начал изучать искусство программирования ;)
Что нам понадобится:
Удачи в ПРОграммировании.
Это, должен вас предупредить, очень-очень-очень рутинная работа, хоть и в данной статье я покажу это на примере простой авторизации на сайте moodle моего первого учебного учреждения, где я начал изучать искусство программирования ;)
Что нам понадобится:
- Браузер (без него никуда)
- Парсер или юзать регулярки (я ленив и выбираю парсер)
- Немного мозгов :)
- Компилятор (однозначно VS)
- Знания C#.
Переходим на страницу сайта где нужно проходить авторизацию, вводим любые данные в поля логина и пароля и жмем кнопку войти, после этого в браузере жмем F12 (у меня Googel Chrome), в появившемся окне переходим на вкладку Network и ищем метод POST
Когда нашли наш POST метод клацаем по нем и ищем следующую строку которая отправляет наши данные серверу:
Так здесь почти все понятно, username - это логин, password - пароль, а что такое testcookies? Это какой то "секретный" ключ но мы его найдем ;)
Переходим на вкладку Elements жмем ctrl+f и вводим название этого секретного ключа:
Нашелся наш и ключик, а его значения передает параметр value, это нам пригодится для того чтоб с помощью парсера получить его значения.
Преступим к программированиюСначала скачаем парсер, прочитать про его можете на хабре. После этого добавим его в наш проект (проект создадим типу WinForms):

Добавим на форму два textBox_a и одну кнопку на которой напишите большими буквами "Войти", и добавим в нашу программу следующий код:
Теперь если вы сделали все правильно то можно произвести авторизацию на сайте из нашей программы :)Добавим на форму два textBox_a и одну кнопку на которой напишите большими буквами "Войти", и добавим в нашу программу следующий код:
// создали компонент WebBrowser
readonly WebBrowser _webBrowser = new WebBrowser();
private void Completed(object sender, WebBrowserDocumentCompletedEventArgs e)
{
try
{
// запустили парсер HtmlAgilityPack
// для поиска testcookies в html разметке
// страницы авторизации
var document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(_webBrowser.DocumentText); //отобразить страницу в виде html
HtmlNode htmlNode = document.DocumentNode.SelectSingleNode("//input[@name='testcookies']"); // поиск тега input с именем testcookies
string str = htmlNode.Attributes["value"].Value; // вытягиваем значения testcookies
string login = tbLog.Text, pass = tbPass.Text, password = null;
// ключ = значения для смены
// спец символов
var urlCoding = new Dictionary
{
{"!", "%21"},
{"#", "%23"},
{"%", "%25"},
{"&", "%26"},
{"'", "%27"},
{"*", "%2a"},
{",", "%2c"},
{":", "%3a"},
{";", "%3b"},
{"<", "%3c"},
{"=", "%3d"},
{">", "%3e"},
{"?", "%3f"},
{"[", "%5b"},
{"]", "%5d"},
{"^", "%5e"},
{"`", "%60"},
{"{", "%7b"},
{"}", "%7d"},
{"|", "%7c"},
{" ", "%20"}
};
// поиск и замена спец символов
foreach (var kvp in urlCoding)
{
password = pass.Replace(kvp.Key, kvp.Value);
}
// построить наш запрос который мы раньше нашли в браузере
// второй рисунок FormData
string data = "username=" + login + "&password=" + password + "&testcookies=" + str;
// отправить запрос для авторизации
_webBrowser.Navigate("http://vtnuft.volyn.ua/md/login/index.php", "_self",
System.Text.Encoding.ASCII.GetBytes(data),
// последний параметр ищем также в браузере, показал на последнем изображении :)
"Content-Type: application/x-www-form-urlencoded");
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, @"Ошибка");
}
}
// А это для кнопки Войти
private void buttSign_Click(object sender, EventArgs e)
{
_webBrowser.Navigate("http://vtnuft.volyn.ua/md/login/index.php");
_webBrowser.DocumentCompleted += Completed;
// дождаться полной загрузки страницы и выполнить метод Completed
while (_webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
}
Удачи в ПРОграммировании.
Иногда нужно написать программу для работы с некими интернет ресурсами, для этого используют (почти всегда) API, но если нету API то приходится использовать тяжелую артиллерию а именно GET и POST запросы.
Это, должен вас предупредить, очень-очень-очень рутинная работа, хоть и в данной статье я покажу это на примере простой авторизации на сайте moodle моего первого учебного учреждения, где я начал изучать искусство программирования ;)
Что нам понадобится:
Удачи в ПРОграммировании.
Это, должен вас предупредить, очень-очень-очень рутинная работа, хоть и в данной статье я покажу это на примере простой авторизации на сайте moodle моего первого учебного учреждения, где я начал изучать искусство программирования ;)
Что нам понадобится:
- Браузер (без него никуда)
- Парсер или юзать регулярки (я ленив и выбираю парсер)
- Немного мозгов :)
- Компилятор (однозначно VS)
- Знания C#.
Переходим на страницу сайта где нужно проходить авторизацию, вводим любые данные в поля логина и пароля и жмем кнопку войти, после этого в браузере жмем F12 (у меня Googel Chrome), в появившемся окне переходим на вкладку Network и ищем метод POST
Когда нашли наш POST метод клацаем по нем и ищем следующую строку которая отправляет наши данные серверу:
Так здесь почти все понятно, username - это логин, password - пароль, а что такое testcookies? Это какой то "секретный" ключ но мы его найдем ;)
Переходим на вкладку Elements жмем ctrl+f и вводим название этого секретного ключа:
Нашелся наш и ключик, а его значения передает параметр value, это нам пригодится для того чтоб с помощью парсера получить его значения.
Преступим к программированиюСначала скачаем парсер, прочитать про его можете на хабре. После этого добавим его в наш проект (проект создадим типу WinForms):

Добавим на форму два textBox_a и одну кнопку на которой напишите большими буквами "Войти", и добавим в нашу программу следующий код:
Теперь если вы сделали все правильно то можно произвести авторизацию на сайте из нашей программы :)Добавим на форму два textBox_a и одну кнопку на которой напишите большими буквами "Войти", и добавим в нашу программу следующий код:
// создали компонент WebBrowser
readonly WebBrowser _webBrowser = new WebBrowser();
private void Completed(object sender, WebBrowserDocumentCompletedEventArgs e)
{
try
{
// запустили парсер HtmlAgilityPack
// для поиска testcookies в html разметке
// страницы авторизации
var document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(_webBrowser.DocumentText); //отобразить страницу в виде html
HtmlNode htmlNode = document.DocumentNode.SelectSingleNode("//input[@name='testcookies']"); // поиск тега input с именем testcookies
string str = htmlNode.Attributes["value"].Value; // вытягиваем значения testcookies
string login = tbLog.Text, pass = tbPass.Text, password = null;
// ключ = значения для смены
// спец символов
var urlCoding = new Dictionary
{
{"!", "%21"},
{"#", "%23"},
{"%", "%25"},
{"&", "%26"},
{"'", "%27"},
{"*", "%2a"},
{",", "%2c"},
{":", "%3a"},
{";", "%3b"},
{"<", "%3c"},
{"=", "%3d"},
{">", "%3e"},
{"?", "%3f"},
{"[", "%5b"},
{"]", "%5d"},
{"^", "%5e"},
{"`", "%60"},
{"{", "%7b"},
{"}", "%7d"},
{"|", "%7c"},
{" ", "%20"}
};
// поиск и замена спец символов
foreach (var kvp in urlCoding)
{
password = pass.Replace(kvp.Key, kvp.Value);
}
// построить наш запрос который мы раньше нашли в браузере
// второй рисунок FormData
string data = "username=" + login + "&password=" + password + "&testcookies=" + str;
// отправить запрос для авторизации
_webBrowser.Navigate("http://vtnuft.volyn.ua/md/login/index.php", "_self",
System.Text.Encoding.ASCII.GetBytes(data),
// последний параметр ищем также в браузере, показал на последнем изображении :)
"Content-Type: application/x-www-form-urlencoded");
}
catch (Exception exception)
{
MessageBox.Show(exception.Message, @"Ошибка");
}
}
// А это для кнопки Войти
private void buttSign_Click(object sender, EventArgs e)
{
_webBrowser.Navigate("http://vtnuft.volyn.ua/md/login/index.php");
_webBrowser.DocumentCompleted += Completed;
// дождаться полной загрузки страницы и выполнить метод Completed
while (_webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
}
Удачи в ПРОграммировании.
0 коммент.:
Отправить комментарий