Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 11.12.2011, 11:19   #1
 Старший сержант
Аватар для OneShot
 
OneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражания
Регистрация: 19.08.2008
Сообщений: 205
Популярность: 2562
Золото Zhyk.Ru: 5
Сказал(а) спасибо: 36
Поблагодарили 268 раз(а) в 122 сообщениях
Отправить сообщение для OneShot с помощью Skype™
 
Lightbulb Пишем бота для браузерной игры при помощи cURL

Играли ли вы когда нибудь в браузерную игру? А часто ли вы наблюдали, что разработчики игр часто ставят пользователей в такую ситуацию, когда "прокачка" вашего чара (персонажа) становится настолько уныла, что для того, чтобы ускорить этот процесс вам предлогают платить реальные деньги, за получение всяких плюшек. Цель разработчиков игры - максимальная прибыль с "хомячков", которые "клюнули на крючок". Те, у кого толстые кошельки, платят денюжку и радуются жизни. Другие, т.н "задроты" или "*******" упорно не сдаются и продолжают тупо монотонно зарабатывать игровые деньги или другие игровые ресурсы. Но эти два способа нам не подходят! Потому что игра то в браузере! И все действия проходят по стандартному HTTP протоколу, создавая от пользователя GET или POST запросы. Поэтому-то мы и напишем бота, который будет висеть в кроне (планировщик задач) и добывать ценные игровые ресурсы за нас Для этой цели нам хорошо подойдет библиотека cURL в PHP. Итак, приступим.
Для тех, кто незнаком с cURL (Client URL Library), объясню как происходит работа:


Инициализируем новую сессию через функцию curl_init
Навешиваем кучу опций для нашего дальнешего запроса к серверу, через curl_setopt или curl_setopt_array
Выполняем сформированный запрос через curl_exec
Получаем ответ, обрабатываем данные, меняем опции cURL-сессии, снова выполняем, итд.


CURL — это удобная библиотека, позволяющая автоматически логинится на сайте, сохранять данные сессии (куки) в файл с последующем их использованием, автоматически следовать по ссылке при серверном редиректе (301, 302), автоматически подставлять реферер страницы, итд.

Итак, напишем класс, который будет создавать новую CURL сессию, и будет иметь метод, позволяющий менять основные опции в рамках одной CURL-сессии, чтобы управлять процессом грабинга страницы Это будут в основном 2 параметра: метод запроса страницы (GET или POST) и данные для отправки (для POST-а).
Вот список основных опций для curl_setopt, которые нам понадобятся:


CURLOPT_HTTPHEADER - опция нужна для формирования дополнительных заголовков в HEAD, отправляемых серверу. она будет нужна в основном для эмуляции захода пользователя "через браузер".
CURLOPT_COOKIEFILE - абсолютный путь до файла куков (путь для сохранения)
CURLOPT_COOKIEJAR - абсолютный путь до файла куков (путь использования уже созданного файла, должен быть такой же как и CURLOPT_COOKIEFILE)
CURLOPT_AUTOREFERER - с этой опцией cURL будет автоматически подменять заголовок HTTP_REFERER при всяких редиректах
CURLOPT_RETURNTRANSFER - включение этой опции отключает автоматически вывод результата в браузер (print, echo) после curl_exec, таким образом он будет возвращатся нам через return.
CURLOPT_FOLLOWLOCATION - автоматическое следование при редиректах (301). внимание: эта опция не работает при включенном безопасном режиме safe_mode или установленном значении open_basedir, до php 5.3 эти опции можно отключить только или в php.ini или в httpd.conf файлах
CURLOPT_URL - задаем адрес для последующего вызова curl_exec
CURLOPT_POST - флаг, отвечающий за то, будет ли следующее выполнение curl_exec идти методом POST.
CURLOPT_POSTFIELDS - данные для отправки методом POST в формате param1=value1¶m2=value2
CURLOPT_REFERER - опция для установки Referer-заголовка (для тех кто в танке, это URL-страницы с которой мы пришли на текущую)


Вот, впринципе и всё:
Код:
class MyOnlineBrowserGameBot
{
	private $user, $pass, $cookie;
	public 
		$url, $referer, $connect, 
		$html, $xml, $error, $info;
	
	public function __construct($user, $pass)
	{
		$this->url = 'http://www.адрес-онлайн-игры.ru/';
		$this->connect 	= curl_init();
		$this->user = $user;
		$this->pass = $pass;
		$this->cookie = getcwd() ."/cookie.txt";
		
		$header = explode("\n", trim('
			User-Agent: Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.7.62 Version/11.00
			Host: www.moswar.ru
			Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
			Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
			Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
			Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
			Connection: Keep-Alive, TE
			TE: deflate, gzip, chunked, identity, trailers
		'));
		
		array_walk($header, create_function('&$header', '$header = trim($header);'));

		curl_setopt_array($this->connect, array
		(
			CURLOPT_HTTPHEADER 		=> $header,
			CURLOPT_COOKIEFILE 		=> $this->cookie,
			CURLOPT_COOKIEJAR		=> $this->cookie,
			CURLOPT_AUTOREFERER 	=> true,
			CURLOPT_RETURNTRANSFER 	=> true,
			CURLOPT_FOLLOWLOCATION => true
		));
	}
	
	public function __destruct()
	{
		curl_close($this->connect);
	}
	
	/** Делаем запрос и меняем реферер **/
	protected function action( $params = array() )
	{
		$ch 		= $this->connect;
		$params 	= (array) $params;
		$timeout 	= isset($params['timeout']) ? $params['timeout'] : mt_rand(1,3); // sec
		$action		= $this->url . ($params[0] ? $params[0] : $params['action']);
		$method 	= strtoupper( isset($params['method']) ? $params['method'] : 'GET' );
		$postdata	= $params['data'];
		
		curl_setopt($ch, CURLOPT_URL, $action);
		curl_setopt($ch, CURLOPT_HEADER, false);
		curl_setopt($ch, CURLINFO_HEADER_OUT, true);
		
		switch( $method )
		{
			case 'GET': {
				curl_setopt($this->connect, CURLOPT_HTTPGET, true); 
				break;
			}
			case 'POST': {
				curl_setopt($ch, CURLOPT_POST, true);
				curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
				break;
			}
		}
		
		$this->html = curl_exec($ch);
		$this->error = curl_error($ch);
		$this->info = curl_getinfo($ch);
		
		// получаем DOM страницы для поиска элементов
		if( $this->html )
		{
			@$this->xml = new DomDocument;
			@$this->xml->loadHTML( $this->html );
			@$this->xpath = new DomXPath( $this->xml );
		
			/* тут также можно получить и сохранить некоторые параметры игры (например количество денег персонажа) */
			// пример:
			$this->money = $this->xpath->query('//div[@id="money"]/span[@class="count"]')->item(0)->nodeValue;
		}

		curl_setopt($ch, CURLOPT_REFERER, $this->info['url']); // выставляем реферер после exec
		sleep($timeout); // делаем задержку в секундах между запросами
		
		return $this;
	}
	
	/** Первый заход на страницу, если файл куков еще не существует логинемся через POST **/
	public function login()
	{
		if( ! realpath($this->cookie) ) // файл еще не создан, логинемся
		{
			$params = array(
				'method' => 'POST',
				'data' => 'user='. $this->user .'&password='. $this->pass .'&remember=1'
			);
		}
		$this->action($params);
		
		return $this;
	}
}
Основа класса уже готова. Остается только дописать еще игровые методы для конкретной игры, симулирующие "хождение" по сайту и игровой процесс. Также отмечу то, что после того, как мы получили ответ от сервера (данные страницы), нам конечно-же нужно из этой страницы что-то получить. Для этой цели идеально подходят стандартные классы PHP 5 для работы с DOM (Document Object Model) - DomDocument и DomXPath. Для тех кто мало знаком с xpath, можно почитать основную информацию на википедии.

После того, как вы дополните класс методами для конкретной игры, то следующим этапом будет создание файла с режимом работы бота, на основне написанного класса, который в последствии будет вызываться на нашем хостинге планировщиком задач (cron) в нужные нам промежутки времени. Солдат спит, служба идет..

Всем удачных "грабежей".
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 22.05.2012, 14:27   #2
 Старший сержант
Аватар для OneShot
 
OneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражанияOneShot блестящий пример для подражания
Регистрация: 19.08.2008
Сообщений: 205
Популярность: 2562
Золото Zhyk.Ru: 5
Сказал(а) спасибо: 36
Поблагодарили 268 раз(а) в 122 сообщениях
Отправить сообщение для OneShot с помощью Skype™
 
По умолчанию Re: Пишем бота для браузерной игры при помощи cURL

Цитата:
Сообщение от NumskullПосмотреть сообщение
Для смертных каждое твоё слово непонятное , ты бы лучше сделал для смертных гайд)

Можно прочитать теорию к примеру на [Ссылки могут видеть только зарегистрированные пользователи. ] и все сразу станет понятно. Чтение много времени не займет
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 23.12.2017, 10:12   #3
 Разведчик
Аватар для vlad.cmd
 
vlad.cmd никому не известный тип
Регистрация: 20.06.2012
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Пишем бота для браузерной игры при помощи cURL

Извиняюсь что поднимаю старые темы. Хоте попробовать поюзать скрипт для браузерной игры. Но не могу установить авторизацию. Вот мои данные для отправки utilizador=МОй_логин&password=МОЙ_ПАРОЛЬ&loginSub= Вход

Пробывал несколько способов

data' => 'utilizador='. $this->Мой_Логин .'&password='. $this->МОй_пароль .'&loginSub='. $this->'Вход'

И так

'data' => 'utilizador='. $this->Мой_логин .'&password='. $this->МОй_ПАРОЛь .'&loginSub=Вход'

Кто может помочь разобраться?

Постоянно на эту строку вот эта ошибка Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or

Последний раз редактировалось vlad.cmd; 23.12.2017 в 10:15.
  Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2 бота для браузерной игры heroeswm.ru Axeman123 Прочее 7 16.12.2017 19:36
[Помогите!] Скрипт браузерной игры? Генер Вопросы и ответы, обсуждения 0 23.04.2011 20:41
[Помогите!] Установка браузерной игры. leoleo Вопросы и ответы, обсуждения 9 16.09.2010 15:26

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 12:58.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net