четверг, 25 марта 2010 г.

Злодеи войны и денег. Часть 1, глава 1 "Начало пути"

Итак, первый пост закончился мечтами о порабощении мира написании бота для heroeswm. В этом посте, я положу начало осуществлению наивных юношеских грез.
Технологии, которые будут использоваться: HTTP Analyzer (для исследования протокола общения с сайтом), Visual Studio 9.0(для написания бота), библиотечка WinInet (для безболезненной работы с протоколом HTTP), Я (чтобы собрать все это в кучу).
Итак, мне нужно - соединиться с сайтом и скачать главную страницу.

смотрю запрос в HttpAnalyzer:





и понимаю что нужно сделать GET запрос для главной страницы. Надо - сделаем:

инициализирую WinInet

internetRoot = InternetOpen
(L"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)", //user agent, нагло брешем серверу про браузер
INTERNET_OPEN_TYPE_DIRECT, //мы работаем без прокси
NULL, //прокси сервер
NULL,//не используется
0); //дополнительные параметров тоже


Открываю http сессию для сайта www.heroeswm.ru:

session = InternetConnect(
internetRoot, //наши интернеты :-)
"www.heroeswm.ru", //адрес сайта
INTERNET_DEFAULT_HTTP_PORT, //80-й порт
NULL, //тут пароля-логина нет
NULL,//на сайт пускают всех
INTERNET_SERVICE_HTTP,//использую http протокол
0, // тут чувствую что надо 0
0); //контекст


Создаю запрос:
request = HttpOpenRequest(
session,//сессия
L"GET",//метод запроса
L"", //должен быть объект, но судя по анализатору - объекта не надо
NULL,// HTTP/1.1
NULL,//
0, //надо все
INTERNET_FLAG_KEEP_CONNECTION,//как в анализаторе
0); //контекст

Отправляю запрос:

HttpSendRequest(
request, //запрос
NULL, //никаких дополнительных заголовков
0, //соответственно и длина у них нулевая
NULL, //тут тоже
0); //ничего

Читаю ответ:

while( InternetReadFile( //читать пока читается
request,//запрос
data + bufferpos,//смещение в буфере
1024,//килобайт
bytesRead))//сколько прочитали
{
if (bytesRead == 0){//если не прочитали ничего
break;// прекращаем попытки
}
bufferpos += bytesRead; //изменяем смещение
}

printf(data) //печатаю ответ в консоль
Последние 3 пункта неплохо бы объединить в в отдельную функцию

bool ProcessGetRequest(WCHAR* buffer, WCHAR* siteobject);

В консоли получилось все хорошо, главную страницу сайта мы прочитали. Теперь надо ввести логин/пароль. Хотел сделать в этом же посте, но, видимо не судьба. Очень уже много букв получилось. Перенесем на следующий.

3 комментария:

  1. имхо, делать все это на сях неблагодарное занятие. Да и нафига делать первый GET-запрос главной страницы? Сразу HTTP-пост с авторизацией и поехали.

    ОтветитьУдалить
  2. ну не знаю, а потом игровую ж логику прописать надо будет. да и попривычнее на сях как-то.
    А GET-запрос главной страницы... Ну будем считать, что делаем это для имитации деятельности обычного пользователя, чтоб нас не засекли ;-)

    ОтветитьУдалить
  3. а чем тебе си не подходит для данной задачи? как по мне - так очень и подходит...
    а вот про то, что можно сразу переходить к авторизации - с этим соглашусь... к чему эти лишности с главной страницей? разве что для ХТТП...

    ОтветитьУдалить