>Пишу небольшой скриптик для игры Grepolis. Ты пишешь скрипт, или нет!? Тебе дали боевой пример.. включай извилины
Ребята, ну помогите еще разок... Мне нужно отправить Post запрос, он выглядит так (как я думаю): requester ('http://ru11.grepolis.com/game/farm_town_info?action=claim_load&town_id=51543&h=$token', 'json={"target_id":"19413","claim_type":"normal","time":300,"town_id":"51543","nlreq_id":13597943}' , $cook, 1 , 0); Не работает!!! Укажите, пожалуйста, на ошибку??? Вот что получается: PHP: <?php function requester($url, $post = 0, $cookies = '', $head = 1, $body = 0) { $cl = curl_init(); curl_setopt($cl, CURLOPT_URL, $url); curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($cl, CURLOPT_HEADER, $head); curl_setopt($cl, CURLOPT_COOKIE, $cookies); curl_setopt($cl, CURLOPT_NOBODY, $body); if ($post){ curl_setopt($cl, CURLOPT_POST, 1); curl_setopt($cl, CURLOPT_HTTPHEADER, array('X-REQUESTED-WITH: XMLHttpRequest')); //иммитируем AJAX запрос //curl_setopt($cl, CURLOPT_HTTPHEADER, array('X-SLIDER-WITH: b00zy-njasha')); curl_setopt($cl, CURLOPT_POSTFIELDS, $post); } //curl_setopt($ch, CURLOPT_STDERR, $f); //Файл, в который будут выводиться сообщения об ошибках $line = curl_exec($cl); curl_close($cl); return $line; } $login = 'Tartang'; $password = '7TXzMQvUZt3qUqh'; //get session [grepolis.com] preg_match_all('#Set-Cookie: (\S+;)#i', requester('http://ru.grepolis.com/start/index?action=login_from_start_page', 'json={"name":"'.$login. '","password":"'.$password.'","passwordhash":"","autologin":false}', 0, 1, 0), $co); $cook = implode('', $co[1]); //get url ans sess [ru11.grepolis.com] preg_match('#Location: (\S+)\r\n#i', requester('http://ru.grepolis.com/start?action=login_to_game_world', 'world=ru11&facebook_session=&facebook_login=&gift_key=&portal_sid=&name=&password=', $cook, 1, 0), $urls); preg_match_all('#Set-Cookie: (\S+;)#i', requester($urls[1], 0, 0, 1, 0), $co); $cook = implode(' ', $co[1]); //join to game $ans = requester('http://ru11.grepolis.com/game/index?login=1', 0, $cook, 1, 0); // other thash and stuff preg_match("#Game\.csrfToken = '(\S+)'#", $ans, $token); print $token[1]; requester ('http://ru11.grepolis.com/game/farm_town_info?action=claim_load&town_id=51543&h=$token', 'json={"target_id":"19413","claim_type":"normal","time":300,"town_id":"51543","nlreq_id":13597943}' , $cook, 1 , 0); ?>
Нет, авторизация проходит! Задача в конце выполнить этот запрос: requester ('http://ru11.grepolis.com/game/farm_town_info?action=claim_load&town_id=51543&h=$token', 'json={"target_id":"19413","claim_type":"normal","time":300,"town_id":"51543","nlreq_id":13597943}' , $cook, 1 , 0);
requester ('http://ru11.grepolis.com/game/farm_town_info?action=claim_load&town_id=51543&h='.$token["1"], 'json={"target_id":"19413","claim_type":"normal","time":300,"town_id":"51543","nlreq_id":13597943}' , $cook, 1 , 0);
Нигде не могу найти пояснение... Почему мы при парсинге выводим значение в переменную $token... А при дальнейшем использовании пишем $token["1"]... Вычитал что это массив, но почему? Читал о preg_match, но в мануале про массив ничего нет
После долгих мучений получилось вот что: PHP: <?php ini_set("max_execution_time", "700"); function requester($url, $post = 0, $cookies = '', $head = 1, $body = 0) { $cl = curl_init(); curl_setopt($cl, CURLOPT_URL, $url); curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($cl, CURLOPT_HEADER, $head); curl_setopt($cl, CURLOPT_COOKIE, $cookies); curl_setopt($cl, CURLOPT_NOBODY, $body); if ($post){ //curl_setopt($cl, CURLOPT_PROXY, "127.0.0.1:9050"); curl_setopt($cl, CURLOPT_POST, 1); curl_setopt($cl, CURLOPT_HTTPHEADER, array('X-REQUESTED-WITH: XMLHttpRequest')); //иммитируем AJAX запрос //curl_setopt($cl, CURLOPT_HTTPHEADER, array('X-SLIDER-WITH: b00zy-njasha')); curl_setopt($cl, CURLOPT_POSTFIELDS, $post); } //curl_setopt($ch, CURLOPT_STDERR, $f); //Файл, в который будут выводиться сообщения об ошибках $line = curl_exec($cl); curl_close($cl); return $line; } $login = 'Tartang'; $password = '7TXzMQvUZt3qUqh'; //get session [grepolis.com] preg_match_all('#Set-Cookie: (\S+;)#i', requester('http://ru.grepolis.com/start/index?action=login_from_start_page', 'json={"name":"'.$login.'","password":"'.$password.'","passwordhash":"","autologin":false}', 0, 1, 0), $co); $cook = implode('', $co[1]); //get url ans sess [ru11.grepolis.com] preg_match('#Location: (\S+)\r\n#i', requester('http://ru.grepolis.com/start?action=login_to_game_world', 'world=ru11&facebook_session=&facebook_login=&gift_key=&portal_sid=&name=&password=', $cook, 1, 0), $urls); preg_match_all('#Set-Cookie: (\S+;)#i', requester($urls[1], 0, 0, 1, 0), $co); $cook = implode(' ', $co[1]); //join to game $ans = requester('http://ru11.grepolis.com/game/index?login=1', 0, $cook, 1, 0); // other thash and stuff preg_match("#Game\.csrfToken = '(\S+)'#", $ans, $token); print $token[1]; /* requester ('http://ru11.grepolis.com/game/farm_town_info?action=claim_load&town_id=51543&h='.$ token["1"], 'json={"target_id":"19413","claim_type":"normal","time":300,"town_id":"51543","nlreq_id":0}' , $cook, 1 , 0); sleep(rand(5,20)); requester ('http://ru11.grepolis.com/game/farm_town_info?action=claim_load&town_id=51543&h='.$ token["1"], 'json={"target_id":"19410","claim_type":"normal","time":300,"town_id":"51543","nlreq_id":0}' , $cook, 1 , 0); */ ?> Скрипт успешно проработал неделю... А сегодня перестал получать переменную token. Посмотрел в коде страницы, ничего вроде не изменилось. Снова проснифил все переходы, вроде все по старому... А скрипт не работает... Взгляните кто-нибудь свежим взглядом, пожалуйста... Как выловить причину? PS на других акках работает без проблем...