Программирование 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
Далее:
Добавляем файл исходник к проекту:
В настройках проекта указываем, что хотим использовать MFC:
И соответственно код приложения:
#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; }
После компиляции и запуска приложения вы увидите следующее:
Для создания более интерактивной системы, например для создания 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=Управляющий_код
Это можно сделать из браузера на вашем телефоне или с других мест где есть доступ в Интернет. Управляющий код может служить для например перезагрузки компьютера или его выключения, в общем это один из способов создания системы по удаленному управлению компьютером. Естественно для удобства можно расширить скрипт, добавив веб форму и разнообразные управляющие элементы. Например вот так:
Для тех кто хочет поподробней узнать о технологии 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.