На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

С++, IE и автоматическая авторизация BASIC Auth



Появилась задача: Написать программу на C++, которая бы запускала Internet Explorer, который бы, в свою очередь, авторизовался автоматически на сайте с защитой BASIC Auth. Посмотреть пример такой защиты можно даже у меня: зайти без логина и пароля в тестовый подраздел сайта не получится. Вы увидите что-то типа такого окошка:



Скрывать в этой директории мне особо нечего, логин: admin, пароль: 111. Однако нам надо не просто зайти, а с помощью программы, написанной на языке C++. Практически любая задача может быть разобрана на подзачи. Запускать внешние приложения с помощью C++ и Microsoft Visual Studio 2013 мы уже умеем - в этой статье разобрано. Теперь же задача усложняется, надо не просто запустить браузер, а заставить его еще автоматически заполнить поля ввода логина-пароля и нажать "Войти".

Здесь задача с одной стороны становится проще: подавляющее большинство современных браузеров логин и пароль в строке для Basic HTTP Auth передавать позволяют. Не будем сейчас говорить о том, что это противоречит современным стандартам, но это есть и это работает. Так, например, для оперы код захода на наш сайт выглядит так:

#include <stdio.h>
#include <windows.h>

int main(int argc, char *argv[])
{
	
system("\"C:\\Program Files\\Opera\\launcher.exe\" https:\\admin:111@upread.ru/auth/index.php");

}
Код пишется в Microsoft Visual Studio 2013, так что вступительные 2 строки необходимы. Приложение не консольное, самое обыкновенное. В первой части седьмой строки запускается опера (проверьте свой путь, она может быть у вас установлена в другом месте); во второй части идет связка логин-пароль через двоеточие, затем добавлен путь до сайта. Путь реально существующий, ведущий именно в раздел моего сайта. Если после запуска у вас открылась опера на этой странице и вы увидели надпись "Успешно", то все и есть успешно.

Но, как уже упоминалось, для IE это не прокатывает. Как же его заставить? Оказывается можно, надо просто создать и установить парочку значений реестра. Конкретно добавить поля с названиями iexplore.exe и explorer.exe; типом DWORD, а значение 0. Есть два варианта: для текущего пользователя и для всех. Различие только в ветках реестра. Для текущего пользователя:

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE

Для всех:

HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE

Язык C++ может сделать и это, причем делается несложно, буквально парой срок. Для примера сделаем для текущего пользователя.

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

typedef DWORD(WINAPI *REGSERVPROC)(DWORD, DWORD);
DWORD value = 0;

int main(int argc, char *argv[])
{	
	HKEY hk;
	RegCreateKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE", &hk);
	RegSetValueEx(hk, L"explorer.exe", 0, REG_DWORD, (const BYTE*)&value, sizeof(value));
	RegCloseKey(hk);

	HKEY hk2;
	RegCreateKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE", &hk2);
	RegSetValueEx(hk2, L"iexplore.exe", 0, REG_DWORD, (const BYTE*)&value, sizeof(value));
	RegCloseKey(hk2);
}
Сложного здесь тоже ничего нет. 11 и 15 строки создают ключи реестра, 12 и 16 - устанавливают значения, 13 и 17 - закрывают. Предварительно добавляем пространства имен (3 строка) и инициализируем переменные в 4-5 строках. Теперь можно выложить и полный текст программы, которая запускает IE и буквально силой заставляет его авторизоваться на выбранном сайте.

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

typedef DWORD(WINAPI *REGSERVPROC)(DWORD, DWORD);
DWORD value = 0;

int main(int argc, char *argv[])
{
	
	HKEY hk;
	RegCreateKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE", &hk);
	RegSetValueEx(hk, L"explorer.exe", 0, REG_DWORD, (const BYTE*)&value, sizeof(value));
	RegCloseKey(hk);

	HKEY hk2;
	RegCreateKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE", &hk2);
	RegSetValueEx(hk2, L"iexplore.exe", 0, REG_DWORD, (const BYTE*)&value, sizeof(value));
	RegCloseKey(hk2);

	system("\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" https://admin:111@upread.ru/auth/index.php");
}
Вот и все, цель достигнута. Если у вас есть какие-либо вопросы по написанию программ на языках C++, Java, PHP, JavaScript, заказы по созданию сайтов, то вы в любое время можете обратиться ко мне на почту up777up@yandex.ru. За очень умеренное денежное вознаграждение я вам с удовольствием помогу.



Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, си плюс плюс, BASIC Auth, Internet Explorer

Читайте также:



Заготовка для диплома по интерфейсу СУБД на C#
Java: наибольшее число, оканчивающееся на 0


© upread.ru 2013-2023
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.