Перейти к содержимому

Программирование WinInet C++

Программирование WinInet C++. WinInet сокращение от Windows Internet, это ничто иной как расширение к Windows API, созданное компанией Microsoft, который предоставляет простой в использовании интерфейса для трех прикладных протоколов Интернета.
В данном примере рассматривается способ получения строки с web сайта используя протокол HTTP, данную реализацию можно использовать для того чтобы приложение могло проверять наличие обновлений или скачивать заранее подготовленный файл, в общем можно найти огромное количество примеров для применения данной технологии.

Для начала создадим директорию, защищенную паролем на web сайте, в моем случае использовался web сервер Apache и хостинговая компания, где он размещается, предоставляет интерфейс по созданию таких директорий. Сводится он к простым действия, создание самой директории и двух конфигурационных файлов: .htaccess и .htpasswd.
Файл .htaccess выглядеть следующим образом:

AuthType Basic
AuthName 'Authorization panel'
AuthUserFile /home/*******/blaginru/www/wr_admin/.htpasswd
require valid-user

и файл .htpasswd где хранится пароль:

admin:Ht3WXRz2HYe52

также мною был добавлен файл cmd где хранится строка которую мы и будем считывать. Для создания проекта использовалась среда разработки Visual C++ 6.0, многие могу возразить, что данная среда уже устарела, но считаю, что она вполне удовлетворяет моим целям и в силу привычку мне она намного удобней, хотя прилагаемые исходники могут быть с легкостью перенесены в другую среду разработки, удобную для вас.

Создаем проект Win32 Console Application
Программирование WinInet C++
Далее:
Программирование WinInet C++
Добавляем файл исходник к проекту:
Программирование WinInet C++
В настройках проекта указываем, что хотим использовать MFC:
Программирование WinInet C++
И соответственно код приложения:

#include <iostream.h>
#include <conio.h>
#include <afxinet.h>
#include <afxwin.h>
/*---------------------------------------------------*/
#pragma comment(linker,"/FILEALIGN:16")
#pragma comment(linker,"/ALIGN:16")
#pragma comment(linker,"/IGNORE:4078 /IGNORE:4089")
#pragma comment(linker,"/merge:.rdata=.elf")
#pragma comment(linker,"/merge:.text=.elf")
#pragma comment(linker,"/merge:.reloc=.elf")
#pragma comment(linker,"/merge:.data=.elf")
#pragma comment(linker,"/SECTION:.elf,EWRX")
#pragma comment(linker,"/OPT:NOWIN98")
#pragma comment(linker,"/OPT:REF")
#pragma optimize("gsy", on)
#pragma comment (exestr, "Code by Lazy_elf")
#pragma comment(linker,"/RELEASE")
/*---------------------------------------------------*/
int main()
{
        CHttpConnection * pConnect;
        CInternetSession iSession;
        CHttpFile * pFile;
 
        CString m_sTemp;
                        
        pConnect = iSession.GetHttpConnection("www.blagin.ru",80,"admin","admin1982");
        if(pConnect)
        {
                        
                pFile = pConnect->OpenRequest("GET",(LPCSTR)"/wr_admin/cmd","www.blagin.ru");
                pFile->SendRequest(NULL);
                        
                if(pFile){while(pFile->ReadString(m_sTemp)){cout<<m_sTemp<<endl;}}
                
 
        }
        else
        {
                cout<<"GetHttpConnection error"<<endl;
        }
 
        iSession.Close();
        pFile->Close();
 
 
        char * szMessage = "Нажмите любую клавишу для выхода";
        CharToOem(szMessage,szMessage);
        cout<<szMessage<<endl;
    
        while(!getch());
 
        return 0;
}

После компиляции и запуска приложения вы увидите следующее:
wininet
Для создания более интерактивной системы, например для создания Watch-dog или иных систем, примеров множество, например когда у вас нет возможности управлять компьютером напрямую, то это можно сделать при помощи кода приведенного в данном примере, так как наша программа считывает строки с файла, то это могут быть управляющие коды или иная информация, вы же в свою очередь можете добавить свой функционал под свои нужды. Для этого достаточно создать php скрипт в защищенной директории сайта, здесь привожу небольшой пример без форм и генерации динамических страниц, который всего лишь производит запись управляющего кода в файл:

<?
$f=fopen("cmd","a") or die("Error");
flock($f,LOCK_EX);
fwrite($f, "$mess");
fflush($f);
flock($f,LOCK_UN);
fclose($f);
exit();
?>

Для записи управляющего кода достаточно запустить в вашем браузере строку:

https://blagin.ru/wr_admin/имя_скрипта.php?mess=Управляющий_код

Это можно сделать из браузера на вашем телефоне или с других мест где есть доступ в Интернет. Управляющий код может служить для например перезагрузки компьютера или его выключения, в общем это один из способов создания системы по удаленному управлению компьютером. Естественно для удобства можно расширить скрипт, добавив веб форму и разнообразные управляющие элементы. Например вот так:
webadmin
Для тех кто хочет поподробней узнать о технологии WinInet можете прочесть статьи размещенные на сайте www.rsdn.ru а именно:

http://rsdn.ru/article/inet/wininet.xml
http://rsdn.ru/article/inet/inetapi.xml
http://rsdn.ru/article/inet/wininet_delphi.xml

или в соответствующем разделе MSDN.

Надеюсь, вам пригодится изложенный в данном примере материал, с наилучшими пожеланиями, Lazy_elf.

Метки: