Добрый день! Имеется функция: 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_POSTFIELDS, $post); } $line = curl_exec($cl); curl_close($cl); return $line; } C помощью нее успешно отправляются Post запросы. Но появилась необходимость отправить Get, чтобы получить код страницы и пропарсить ее... Сниффер мне выдает ссылку: http://ru11.grepolis.com/game/building_place?action=culture&town_id=51543&h=2f089cf9271&json=%7B%22town_id%22%3A%2251543%22%2C%22nlreq_id%22%3A16133329%7D&_=1342004135652]http://ru11.grepolis.com/game/building_pla..._=1342004135652 Где h=2f089cf9271 - переменная, которая парсится из кода страницы... Делаю так: PHP: $culture = requester('http://ru11.grepolis.com/game/building_place?action=culture&town_id=51543&h='.$token[1]'&json=%7B%22town_id%22%3A%2251543%22%2C%22nlreq_id%22%3A16133329%7D&_=1342003348170', 0, $cook, 1, 0); print $culture Выскакивает ошибка... Что не так?
PHP: $culture = requester('http://ru11.grepolis.com/game/building_place?action=culture&town_id=51543&h='.$token[1].'&json=%7B%22town_id%22%3A%2251543%22%2C%22nlreq_id% 22%3A16133329%7D&_=1342003348170', 0, $cook, 1, 0); Не выспался?)
И это тоже! Это мой первый скрипт... Post запросы научился отправлять... Нигде не смог найти описание как отправить get запрос с параметрами Json... Что не так?
Блин, почему я получаю не ту страницу которая мне нужна??? Опишу подробнее: Вот код скрипта: PHP: <?php header('Content-Type: text/html; utf-8; charset=UTF-8'); 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_POSTFIELDS, $post); } $line = curl_exec($cl); curl_close($cl); return $line; } $login = 'Tartang'; $password = '7TXzMQvUZt3qUqh'; 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]); 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]); $ans = requester('http://ru11.grepolis.com/game/index?login=1', 0, $cook, 1, 0); preg_match("#Game\.csrfToken = '(\S+)'#", $ans, $token); ?> Для дальнейшего парсинга мне нужно получить вот такой ответ: Отправляю Get запрос, который показал сниффер: PHP: $culture = requester('http://ru11.grepolis.com/game/building_place?action=culture&town_id=51543&h='.$token[1].'&json=%7B%22town_id%22%3A%2251543%22%2C%22nlreq_id%22%3A0%7D&_=1342009498240', 0, $cook, 1, 0); При выводе $culture, мне выдается главная страница... Как же получить именно тот контент, который показан в сниффере?
Пропуска на самом деле нет... Это так на форуме отобразилось... Блин, так и не получается получить нужную страницу...
Не пойму как формировать эти данные: "nlreq_id" "_" Походу они как-то на времени сервера завязаны... Из-за них может не тот content возвращаться?
Если использовать time(), я получаю 10-ти значное число... А параметр "_" состоит из 13 символов, первые 10-ть из которых генерируются time(). А что за остальные три цыфры? Никак не могу додуматься... Помогите, пожалуйста!!!
Вот что получается: PHP: <?php header('Content-Type: text/html; utf-8; charset=UTF-8'); 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_POSTFIELDS, $post); } $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); //echo $token[1]; $time = explode(' ', microtime()); $timef = $time[1] . substr($time[0], 2, 3); //echo $timef; $culture = requester('http://ru11.grepolis.com/game/building_place?action=culture&town_id=51543&h='.$token[1].'&json={"town_id":"51543","nlreq_id":0}&_='.$timef, 0, $cook, 1, 0); print $culture; Мне нужно получить А я получаю главную страницу.... Что же не так???