В предыдущем посте я рассказал о программе UtmCheck. Сейчас хочу рассказать по какому принципу работает программа, и какие проблемы пришлось решить.
Для того чтобы получить данные о состоянии счета в билинге, нам нужно программно открыть страницу билинга и прочитать эти данные. Для работы с веб-сервером (запрос, отсылка данных) нам подойдет Win32 Internet Extensions, или WinInet. WinInet представляет собой API для доступа к общим протоколам интернет, включая FTP, HTTP и Gopher. Это высокоуровневый API, позволяющий, в отличие от WinSock или TCP/IP, не заботиться о деталях реализации соответствующих интернет протоколов. К тому же библиотека входит в стандартную поставку Windows. По WinInet есть отличная статья Игорь Ткачёва на www.rsdn.ru. Прочитали статью и кажется вот оно. Все как на блюдечке с голубой каёмочкой. Описание, примеры. Берём функцию InternetConnect и третьим параметром INTERNET_DEFAULT_HTTPS_PORT говорим - работаем по https. Пишем простой код на чтение данных с первой страницы и запускаем. Тааа-дааа.... нет не та-да , а ошибка 12045 ERROR_WINHTTP_SECURE_INVALID_CA. Хм, неверный сертификат, что за ерунда? А давайте посмотрим как это работает через браузер. Заходим на страницу и видим предложение установить сертификат сайта. А в особо "запущенных" случаях (у меня так получилось) может выдать что сертификат то неверный, дата истекла у него и подобное. И только после того как мы принимаем сертификат, и просим игнорировать неверный сертификат, нас пускает на нужную страницу. Таким образом наша проблема в том, что мы не можем принять сертификат. Чтож, будем это исправлять. Для этого нужно вставить следующий код
Для того чтобы получить данные о состоянии счета в билинге, нам нужно программно открыть страницу билинга и прочитать эти данные. Для работы с веб-сервером (запрос, отсылка данных) нам подойдет Win32 Internet Extensions, или WinInet. WinInet представляет собой API для доступа к общим протоколам интернет, включая FTP, HTTP и Gopher. Это высокоуровневый API, позволяющий, в отличие от WinSock или TCP/IP, не заботиться о деталях реализации соответствующих интернет протоколов. К тому же библиотека входит в стандартную поставку Windows. По WinInet есть отличная статья Игорь Ткачёва на www.rsdn.ru. Прочитали статью и кажется вот оно. Все как на блюдечке с голубой каёмочкой. Описание, примеры. Берём функцию InternetConnect и третьим параметром INTERNET_DEFAULT_HTTPS_PORT говорим - работаем по https. Пишем простой код на чтение данных с первой страницы и запускаем. Тааа-дааа.... нет не та-да , а ошибка 12045 ERROR_WINHTTP_SECURE_INVALID_CA. Хм, неверный сертификат, что за ерунда? А давайте посмотрим как это работает через браузер. Заходим на страницу и видим предложение установить сертификат сайта. А в особо "запущенных" случаях (у меня так получилось) может выдать что сертификат то неверный, дата истекла у него и подобное. И только после того как мы принимаем сертификат, и просим игнорировать неверный сертификат, нас пускает на нужную страницу. Таким образом наша проблема в том, что мы не можем принять сертификат. Чтож, будем это исправлять. Для этого нужно вставить следующий код
DWORD dwFlags; DWORD dwBuffLen = sizeof(dwFlags); InternetQueryOption(hRequest, INTERNET_OPTION_SECURITY_FLAGS, (LPVOID)&dwFlags, &dwBuffLen); dwFlags = dwFlags | SECURITY_FLAG_IGNORE_UNKNOWN_CA | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID; InternetSetOption(hRequest, INTERNET_OPTION_SECURITY_FLAGS, &dwFlags, sizeof (dwFlags));после вызова HttpOpenRequest, но перед вызовом HttpSendRequest. Пробуем запустить. Тааа-дааа. Получилось. Далее, как мне кажется, все просто. Нужно открыть требуемую страницу в билинге и прочитать от туда данные. В данном случае нам нужно найти на странице ( а это по сути текстовый файл ) фразу "Баланс (у.е.)". и там где то рядом с ней и есть нужная нам цифра баланса счета. Ну а дальше рисуем интерфейс. Я решил делать через WinAPI, что хорошо сказалось на размере программы. В принципе все. Код конечно не ахти какой, перескакиваю с char на tchar , и другие минусы. Но, на том и учимся.
0 коммент.:
Отправить комментарий