C# — Нужна помощь авторизации c#


C# — Нужна помощь авторизации c#

Одна из интересных тем в программировании – это имитация работы браузеров и людей. Некий тандем. В это число входит, например, авторизация на сайте. Здесь программа должна уметь запросить страницу с входом, заполнить поля и получить результат. На примере одного сайта я покажу как это делать.

Итак, в одном из заказов потребовалось мне спарсить закрытый контент сайта. Закрытый от незарегистрированных пользователей. Сам парсинг (например, с помощью CsQuery) мы уже изучили, но вот как обойти форму входа? На самом деле это просто, но требуется внимательность. Ну и кое-что, конечно, надо просто знать.

Я не буду показывать вам рабочий сайт, авторизуемся мы на примере другого, но принцип работы совершенно идентичен. Вот сайт – keft.ru. Предположим, мы там зарегистрировались, а теперь хотим научиться автоматически входить. Если посмотреть исходный код сайта, то мы увидим обработчик формы входа:

Давайте попробуем послать по данному адресу обычный POST запрос и получить ответ. Напишем следующий код:

Попробуем его выполнить и получаем:

Что ж, получаем совершенно логичный и ожидаемый результат: сервер требует авторизации. Давайте посмотрим, какие данные браузер отсылает для авторизации. Переходим на вкладку “Network”, выбираем файл login.php и смотрим информацию POST-запроса. Тут нас интересуют две вещи: отсылаемые поля формы и заголовки запроса. Отсылаемые поля выглядят так:

Обратите внимание, что помимо двух полей логина и пароля, есть еще какое-то поле login_ok, которое отправляется пустым. Что ж, добавляем информацию к нашему коду:

Дальше смотрим отправляемые заголовки:

Добавляем и их к нашему запросу:

Пробуем выполнить модифицированный код с авторизацией пост запроса:

И без проблем входим на сайт.

Требования к программе:

    необходим Framework 4.5 или выше;

метод, в котором происходит запрос, должен быть асинхронным (async);

необходимо подключить пространства имен:

А дальше все зависит от ТЗ или вашей фантазии. Например, можно подключить CookieContainer, в котором хранить получаемые куки и затем отправлять другие запросы к сайту и парсить закрытую информацию. Либо же создавать ботов. Есть вопросы? Пишите, за плату я вам помогу.

Реализовать процесс авторизации и регистрации программно

Как правильно реализовать процесс регистрации и авторизации пользователя в программе на языке C#? Куда должен заноситься зарегистрированный пользователь и должна ли отображаться информация о пользователе в окне авторизации после данного процесса?

1 ответ 1

Вот пример для регистрации нового пользователя в локальную БД на Mysql :

Строка подключения будет выглядеть примерно так :

Для авторизации пишите запрос вроде :

Если запрос вернул строки и пользователь с указанным логином и паролем есть в БД то открывайте главную форму или что там необходимо сделать. Это только один из вариантов коих много. И база данных, как заметил @VlaD только один из них.

C# — Нужна помощь авторизации c#

Имеется следующая процедура:

Имеется таблица Users, в которой содержатся поля Login и Password. С помощью окна авторизации(C#) необходимо пройти авторизацию пользователя через MySQL-запрос. как это реализовать без загрузки всей таблицы в DataSet на стороне компьютера клиента, я ума не приложу.


Я просто не понимаю в чем ошибка. пробовал и через «MySqlDataReader rd = myCommand.ExecuteScalar();».

Никакие значения я не принимаю

Ответы

Ну если честно, то судя по коду вы все делаете верно.

Проверьте, может быть вам просто сам SQL запрос не возращает никаких данны, т.е. проверьтие после «myCommand . ExecuteReader ();» свойство MySqlDataReader «HasRows».

Мне кажется, что оно будет равно false, и следовательно просто не выполняется код считывания данных.

Можно попробовать сделать немного по другому, если вам нужен именно факт того, что данные пользователя есть в БД. Например, запрос может выглядеть так:

string CommandText = «SELECT COUNT(*) FROM Users WHERE Login='» + txt_Login . Text + «‘ AND Password='» + txt_Pass . Text + «‘» ;//Мы просто получаем кол-во строк результата запроса

В итоге можно выполнить код: int Count = myCommand.ExecuteScalar();

И в случае, если переменная Count будет больше 0, то пользовательские данные есть в системе, а он будет считаться авторизованным.

#4 — Авторизация пользователя через базу данных

Видеоурок

Для работы с базой данных вам стоит изучить язык запросов к БД. Данный язык называется SQL и его синтаксис одинаков что при использовании с C#, что при использовании с другими языками.

Цукерберг рекомендует:  Что читать web-разработчику

Курс по языку SQL вы можете найти здесь .

Для авторизации пользователя необходимо выполнить SQL запрос, который выберет пользователя с таким же логином и паролем, как это было указано пользователем в программке через поля ввода информации.

Для выполнения команды потребовались такие классы, как:

C# — Нужна помощь авторизации c#

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1

Заметил, что Хабре есть несколько статей, поясняющих как авторизировать desktop-приложения на Вконтакте. Но упор всех статей делается на авторизацию без использования веб-браузера, что является не официальным спобом, который предлагает нам Вконтакте.

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

Под катом вы увидите процесс написания класса для авторизации и последующей работой с API.

Код не претендует на идеальность (скорее даже наоборот), а статья ориентирована скорее на новичков и объясняет как с нуля начать создавать Desktop-приложение.

Начать прежде всего нужно с создания приложения здесь.

Зная ID приложения можно продолжать дальше.

Как проходит авторизация?

С процессом авторизации можно ознакомиться, прочитав официальную документацию Вконтакте здесь.

Для удачной авторизации нам требуется получить ключ access_token, с помощью которого мы будем обращаться к методам API. Так же возможно вам понадобится ID пользователя, от имени которого прошла авторизация и время действия сессии (этого самого access_token).

Чтобы получить нужные нам данные, необходимо через браузер перейти по определенному адресу Вконтакте, который вернет нам форму авторизации. После успешной авторизации Вконтакте нас перенаправит и передаст во фрагменте URL (через «#») нужные нам данные (access_token, user_id, expires_in).

Такой вариант получения нас не устраивает, так как у нас desktop-приложение, поэтому на сервере Вконтакте есть страница-заглушка, которая возвращает переданные данные как html-код. Адрес страницы: api.vkontakte.ru/blank.html


Создаем проект C# и класс для работы с API (у меня он зовется vkAPI).

Объявляем нужные нам константы и переменные класса.

const int App >
private string access_token = null; //ключ сессии
private string user_ >

Далее перейдем к написанию собственно самой авторизации.

Для этого создадим форму, назвав ее AuthForm и поместим туда компонент WebBrowser.

В классе vkAPI создаем шаблон нашей будущей функции.

public bool Authorize()
<
>

Функция нам будет возвращать исход авторизации (был авторизован или нет).

Чтобы не городить код в AuthForm, я решил все реализовать прямо в vkAPI с помощью подписки на событие Navigated компонента WebBrowser.

Код функции Authorize получился у меня таким (с комментариями).

public bool Authorize()
<
//стираем данные о предыдущей авторизации
access_token=null;
user_ > //создаем форму авторизации
AuthForm authform = new AuthForm();
//получаем объект компонента WebBrowser
WebBrowser browser = (WebBrowser)authform.Controls[«webBrowser»];
//Подписываемся на событие Navigated в функции Authorize_proceed
browser.Navigated += new WebBrowserNavigatedEventHandler(Authorize_proceed);
//переходим на страницу авторизации с нужными нам данными.
browser.Navigate(«http://api.vkontakte.ru/oauth/authorize?client_ > «&scope=photos&redirect_uri=»+
«http://api.vkontakte.ru/blank.html&display=popup&response_type=token»);
//показываем диалог авторизации
authform.ShowDialog();

//проверяем были ли мы авторизованы и возвращаем значение
if (access_token == null || user_ > else return true;
>

Подробно узнать какие данные передаются по адресу api.vkontakte.ru/oauth/authorize можно здесь

Далее реализуем функцию Authorize_proceed, которая перехватывает переходы в браузере и получает ответы от Вконтакте.

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

private void Authorize_proceed(object sender, WebBrowserNavigatedEventArgs e)
<
//Разбираем ссылку на кусочки
string[] parts = e.Url.AbsoluteUri.Split(‘#’);
//получаем объект браузера
WebBrowser browser = (WebBrowser)sender;
//получаем объект формы авторизации
AuthForm authform = (AuthForm)browser.Parent;

//проверяем, что нас перенаправили на нужный адрес при успешной авторизации
if (parts[0] == «http://api.vkontakte.ru/blank.html»)
<
//если ошибка, закрываем форму
if (parts[1].Substring(0, 5) == «error») authform.Close();
//если авторизация успешна
else if (parts[1].Substring(0, 12) == «access_token»)
<
//разбираем ответ
parts = parts[1].Split(‘&’);

//записываем данные
access_token = parts[0].Split(‘=’)[1];
user_ )[1];
//закрываем форму авторизации
authform.Close();
>
>
else
<
//неизвестный ответ при неудачном входе и нажатии кнопки «отмена»
parts = e.Url.AbsoluteUri.Split(‘?’);
if (parts[0] == «http://api.vkontakte.ru/oauth/grant_access»)
//снова переходим к авторизации
browser.Navigate(«http://api.vkontakte.ru/oauth/authorize?client_ > «&scope=photos&redirect_uri=»+
«http://api.vkontakte.ru/blank.html&display=popup&response_type=token»);
>
>

С помощью такого говнокода простого способа можно выполнить авторизацию Вконтакте через браузер.

Далее попробуем выполнить тестовый запрос к API. Для этого воспользуемся простым методом getProfiles и запросим данные авторизованного пользователя. Для этого я написал простую функцию:

public string[] GetMyProfile()
<
string profiles = «https://api.vkontakte.ru/method/getProfiles?u > «&access_token=» + access_token;

System.Net.WebRequest reqGET = System.Net.WebRequest.Create(profiles);
System.Net.WebResponse resp = reqGET.GetResponse();
System.IO.Stream stream = resp.GetResponseStream();
System.IO.StreamReader sr = new System.IO.StreamReader(stream);
string json = sr.ReadToEnd();

JObject o = JObject.Parse(json);
JArray response = (JArray)o[«response»];

string[] profile = new string[2];
profile[0] = (string)response[0][«first_name»];
profile[1] = (string)response[0][«last_name»];

Углубляться в код не буду, скажу лишь, что запросы-ответы были реализованы с помощью WebRequest.

Ответы API я получал в формате JSON (а не XML), которые были удачно разобраны при помощи библиотеки Json.NET

Вот и всё. Надеюсь данный материал может оказаться кому-нибудь полезным.

Цукерберг рекомендует:  Основы программирования - Как узнать склонен ли ты к этому

Работа с API ВКонтакте на C#

Приветствую тебя, дорогой читатель! В статье описан процесс создания простейшего WindowsForms приложения, которое будет работать с API социальной сети «ВКонтакте».


  1. Получить User Token и выполнять все дальнейшие запросы с помощью него.
  2. Получить на вход ID пользователя.
  3. Вывести информацию о пользователе с введённым ID.

UPD:Репозиторий на GitHub
UPD(26/09/2020): Добавлен параметр ‘version’ к запросам. Добавлено автозаполнение ID приложения при получении токена. Добавлено предупреждение.
Предупреждение: Используемая версия API — 5.52. На 26/09/2020 последней является 5.85. Начиная с API версии 5.8, программа работать не будет, так как в полях ‘city’ и ‘country’ возвращаются объекты, а не числа.

Для удобства я буду использовать две библиотеки:

  • xNet — для произведения GET-запросов.
  • JSON.Net — для считывания ответов на эти запросы.

Первое, что необходимо сделать — это получить ID приложения. Для этого нужно зайти на VkDevelopers, создать новое Standalone приложение, зайти в его настройки и скопировать ApplicationID.

Можно приступать к созданию приложения, заходим в VisualStudio и создаём новое WindowsForms приложение.

После подключения библиотек создаём две формы: MainForm (Можно использовать стандартную Form1) и AuthorizationForm. Формы выглядят так:

Создадим ещё один файл класса. Назовём его VkAPI.

Приступаем к написанию кода.

Для начала реализуем получение токена. Для этого в MainForm создадим обработчик нажатия на кнопку Button_GetToken:

Теперь разберём всё по порядку:

При нажатии на кнопку открывается AuthorizationForm с Web-браузером, в браузере открывается ссылка:

Параметр client_id — это ID приложения, полученный нами в начале статьи. После параметра scope перечислены разрешения, которые мы запрашиваем, полный список разрешений можно найти здесь.

При обновлении страницы мы проверяем содержится ли в адресе access_token, если да, то мы разбиваем адрес и заносим в файл token и ID пользователя, который авторизовывался. После этого AuthorizationForm закрывается. Токен получен!

Теперь можно приступить к получению и выводу информации о пользователе. Нам нужно получить имя, фамилию, город, страну и фото. Можно получать их запросами, по отдельности, но лучше получить их в одном запросе.

Отредактируем файл VkAPI.cs:

При запуске приложение пытается считать токен и ID пользователя:

Если считывание прошло успешно, то приложение пытается произвести запрос информации о пользователе (Проверка токена на валидность):

Если запрос успешен, то все поля в форме заполняются и кнопка GetToken становится неактивной:

Иначе кнопка GetToken активна, и при нажатии на неё срабатывает функция:

Теперь разберёмся как происходит GET-запрос. Сначала создаётся переменная:

Далее в неё заносятся параметры:

И производится GET-запрос:

Результат обрезается до строки, которую можно конвертировать:

Происходит конвертация json в словарь:

Наше небольшое приложение готово! Всем спасибо за внимание! Я готов выслушать ваши замечания.

Читают сейчас

Похожие публикации


  • 19 ноября 2020 в 19:04

«Как баран на новые ворота» или пользовательские «псевдо-3D» объекты в NanoCAD с помощью MultiCAD.NET API

«Лицо без шрама» или первые шаги в Multicad.NET API 7 (для Nanocad 8.1)

Отправка запроса на все базы данных всех указанных серверов на примере MS SQL Server и C#.NET

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 14

Статья не про очередной новомодный MVC паттерн, и не про полудохлый UWP. Код не очень чистый, ну и что? Вы не разобрались в 2 строчках из которых состоит проект?

Автору: спасибо за полезную статью.

Уважаемый автор, призываю задуматься в первую очередь о необходимости статья на хабре. Безусловно, конкретно для Вас профит очевиден — неплохой фидбек т сообщества. Но по факту, статью бы спрятать в черновик.

2020 год, если есть очевидная необходимость не в web, а именно desktop, и если уж завязываться только на Windows, то либо UWP, либо WPF (хоть об этом и было выше).

UWP — это про windows 10 и windows 10 mobile. Пожалуйста, спуститесь на землю и оцените соотношение пользователей XP/7/8 и 10 прежде чем навязывать кому-то UWP.

Что касается WPF, предлагаю Вам сравнить насыщенные видимыми контролами приложения WPF и Win forms по потреблению ресурсов перед тем, как предлагать кому-то WPF

О, сейчас мы уйдем в холивар, вестимо…

Для начала, если перечитать моее сообщение внимательно (!), то можно уловить цепочку, то можно увидеть приоритетность при выборе используемых инструментов.

Далее, про «спуститесь на землю» и «навязывать». Автор — новичек и определил целевую аудиторию поста — новички. Соответственно, к моменту, когда знания будут применятся в реальных проектах, скорее всего пройдет какое-то время. И с течением времени «пользователей XP/7» станет еще меньше, не говоря уже о 8.x, для которых переезд на 10 практически безболезненый.

Про WPF… то есть оптимизация отрисовки через DirectX, а не через обращение к ядру ОС; удобство разработки (номарльный Data Binding) с возможностью постороения логичной трехслойной архитектуры, а не через спагетти-код; шикарные возможности кастомизации UI и прочее это все в зачет не идет? Ну и да, потребление ресурсов, я уверене, не от кривого WPF, а неумения им пользоваться (возможно, по причине того, что пересаживаются с WinForms толком не разобравшись).

Цукерберг рекомендует:  Автоматическая генерация содержания с помощью jQuery - Демонстрация 3 -

И да, я не навязываю, это Ваш выбор использовать инструмент, к которому вы привыкли XP+WinForms — прямой путь «вернуть себе свой 2007-й год».

Простите, но это похоже на проповедь неофитов, которые ранее то же самое говорили про COM, Silverlight, WinRT и WPF. Что ни чуть не помешало мелкомягким забить на эти некогда перспективные технологии. На чём же, спрашивается, основан Ваш оптимизм в отношении будущего UWP?

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

== Про WPF… то есть оптимизация отрисовки через DirectX, а не через обращение к ядру ОС

сделанная хуже некуда https://jeremiahmorrill.wordpress.com/2011/02/14/a-critical-deep-dive-into-the-wpf-rendering-system/

== удобство разработки (номарльный Data Binding)

нормальным его считают те, кто не знаком с FRP и не умеет делать WinForms без SmartUI и визуального редактора. А вообще-то Data Binding через IPropertyChanged это просто писец какой отстой — утечки памяти, дыра в типизации, нельзя нормально дебажить и вопиющая неэффективность

== возможностью постороения логичной трехслойной архитектуры

MVVM логичная? да вы шо!

== шикарные возможности кастомизации UI

без производительности может идти лесом. Спросите у любого юзера, что он думает о тормознутых программах, ага?

== Ну и да, потребление ресурсов, я уверене, не от кривого WPF, а неумения им пользоваться


что именно даёт вам эту уверенность?

== я не навязываю, это Ваш выбор использовать инструмент, к которому вы привыкли XP+WinForms — прямой путь «вернуть себе свой 2007-й год».

Я ни делал никаких выборов и ни к чему не привык. У меня абсолютно прагматичный подход к выбору фреймворка. Если надо сделать примитивную хрень для отображения и поста няшных котиков — Electron либо UWP. Если под виндовз, и основное перформанс — MFC. Если на производительность можно немножко положить в пользу удешевления разработки — WinForms

Онлайн-помощь «C++/C#»,
Программирование

Эта работа успешно выполнена на онлайн-сервисе помощи студентам «Всё сдал!».

  • Задание
  • Обсуждение

Время начала — 9:30 Длительность — один час Количество заданий: задача на классы и тест из четырех вопросов Тема: классы и тест по ЯП C# Первый пример: Задача на классы. Будет дан базовый класс(base) с параметрами x и y. Два конструктора: 1- по умолчанию, делает x и y равными нулю, 2- с параметрами «входной x, входной y». Первое задание: создать класс Child, наследованный от base, в нем определить абстрактный метод SetXY. Создать класс Child2, наследуемый от Child, в котором переопределить эту абстрактную функцию. Создать объект по классу Child2 и продемонстрировать работу SetXY. Попробовать создать объект класса Child и объяснить почему он не создаётся. Формат скидываемых файлов: текстовый, то есть просто сам код кинуть. Задачи скорее всего все на классы. Тест: по кускам кода сказать скомпилируется ли он/где будет ошибка/что не так с кодом/ так далее. ЯП C++/C#. По возможности прокомментировать чуть-чуть. Пример второй в файле

Это место для переписки тет-а-тет между заказчиком и исполнителем.
Войдите в личный кабинет (авторизуйтесь на сайте) или зарегистрируйтесь, чтобы
получить доступ ко всем возможностям сайта.

C# Авторизация ВКонтакте через http без api: Справочник по C#

В этой инструкции рассмотрен метод авторизации клиента по логину и паролю, а так же получение булево значение true или false в зависимости от того, прошла авторизация или нет.

При работе будет использоваться библиотека HtmlAgilityPack для парсинга Html. Подробнее об этой библиотеке можно прочесть тут.
Авторизация проходит через мобильную версию сайта контакта, так как это проще в реализации.

Необходимо cделать импорт библиотек как показано ниже:

В своей программе я использовал виджет статусной строки statusStrip и после проверки авторизации результат появлялся там.
Вот так выглядит мой вариант:

Работа через Http без использования Api может быть нужна только лишь для проверки валидности аккаунта(ов), так как все остальные действия уже делать во много раз сложнее. Разработчики контакта пожизненно борются с ботами, которые работают через http и результат реально виден. Если вы хотите программным путём работать с группами, друзьями, пабликами и тд, то делать это будет логично только используя api.

C# — Нужна помощь авторизации c#

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

Ответ # 8 · x1 дата добавления: 24.10.2012 / 11:43
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих