Curl - отправка Get запроса

Discussion in 'PHP' started by Seganapa, 11 Jul 2012.

  1. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Добрый день!
    Имеется функция:
    PHP:
    function requester($url$post 0$cookies ''$head 1$body 0)  
    {  
          
    $cl curl_init();  
          
    curl_setopt($clCURLOPT_URL$url);  
          
    curl_setopt($clCURLOPT_RETURNTRANSFER1);  
          
    curl_setopt($clCURLOPT_HEADER$head);  
          
    curl_setopt($clCURLOPT_COOKIE$cookies);  
          
    curl_setopt($clCURLOPT_NOBODY$body);  
          if (
    $post){  
              
    curl_setopt($clCURLOPT_POST1);  
              
    curl_setopt($clCURLOPT_HTTPHEADER, array('X-REQUESTED-WITH: XMLHttpRequest'));  //иммитируем AJAX запрос 
              
    curl_setopt($clCURLOPT_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$cook10);
    print 
    $culture
    Выскакивает ошибка... Что не так?
     
  2. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    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$cook10);
    Не выспался?)
     
  3. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    И это тоже!
    Это мой первый скрипт... Post запросы научился отправлять...
    Нигде не смог найти описание как отправить get запрос с параметрами Json...

    Что не так?
     
  4. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Там где я пометил небыло точки.
     
  5. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Блин, почему я получаю не ту страницу которая мне нужна???

    Опишу подробнее:

    Вот код скрипта:
    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($clCURLOPT_URL$url);  
          
    curl_setopt($clCURLOPT_RETURNTRANSFER1);  
          
    curl_setopt($clCURLOPT_HEADER$head);  
          
    curl_setopt($clCURLOPT_COOKIE$cookies);  
          
    curl_setopt($clCURLOPT_NOBODY$body);  
          if (
    $post){  
              
    curl_setopt($clCURLOPT_POST1);  
              
    curl_setopt($clCURLOPT_HTTPHEADER, array('X-REQUESTED-WITH: XMLHttpRequest'));  //иммитируем AJAX запрос 
              
    curl_setopt($clCURLOPT_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}'010), $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='$cook10), $urls);  
    preg_match_all('#Set-Cookie: (\S+;)#i'requester($urls[1], 0010), $co);  
    $cook implode(' '$co[1]);  

    $ans requester('http://ru11.grepolis.com/game/index?login=1'0$cook10);  

    preg_match("#Game\.csrfToken = '(\S+)'#"$ans$token);  

    ?>
    Для дальнейшего парсинга мне нужно получить вот такой ответ:
    [​IMG]

    Отправляю 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$cook10);
    При выводе $culture, мне выдается главная страница...
    Как же получить именно тот контент, который показан в сниффере?
     
    #5 Seganapa, 11 Jul 2012
    Last edited: 11 Jul 2012
  6. Art!P

    Art!P Elder - Старейшина

    Joined:
    22 Jan 2008
    Messages:
    169
    Likes Received:
    28
    Reputations:
    5
    req_id% 22
    ИМХо в этой строчке пропуск не может быть.
     
  7. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Пропуска на самом деле нет... Это так на форуме отобразилось...

    Блин, так и не получается получить нужную страницу...
     
  8. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Не пойму как формировать эти данные:
    "nlreq_id"
    "_"

    Походу они как-то на времени сервера завязаны...
    Из-за них может не тот content возвращаться?
     
  9. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    С "nlreq_id" разобрался, а вот с "_" никак... Где же брать это значение?
     
  10. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Если использовать time(), я получаю 10-ти значное число...
    А параметр "_" состоит из 13 символов, первые 10-ть из которых генерируются time(). А что за остальные три цыфры?

    Никак не могу додуматься... Помогите, пожалуйста!!!
     
  11. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Вот что получается:
    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($clCURLOPT_URL$url);  
          
    curl_setopt($clCURLOPT_RETURNTRANSFER1);  
          
    curl_setopt($clCURLOPT_HEADER$head);  
          
    curl_setopt($clCURLOPT_COOKIE$cookies);  
          
    curl_setopt($clCURLOPT_NOBODY$body);  
          if (
    $post){  
              
    curl_setopt($clCURLOPT_POST1);  
              
    curl_setopt($clCURLOPT_HTTPHEADER, array('X-REQUESTED-WITH: XMLHttpRequest'));  //иммитируем AJAX запрос 
              
    curl_setopt($clCURLOPT_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}'010), $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='$cook10), $urls);  
    preg_match_all('#Set-Cookie: (\S+;)#i'requester($urls[1], 0010), $co);  
    $cook implode(' '$co[1]);  

    //join to game  
    $ans requester('http://ru11.grepolis.com/game/index?login=1'0$cook10);  

    // other thash and stuff  
    preg_match("#Game\.csrfToken = '(\S+)'#"$ans$token);  
    //echo $token[1]; 

    $time explode(' 'microtime());
    $timef $time[1] . substr($time[0], 23);
    //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}&_='.$timef0$cook10);
    print 
    $culture;
    Мне нужно получить [​IMG]

    А я получаю главную страницу.... Что же не так???
     
    #11 Seganapa, 12 Jul 2012
    Last edited: 12 Jul 2012
  12. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    913
    Likes Received:
    480
    Reputations:
    724
    Возможно отправляешь не все нужные для хорошего ответа данные, например REFERER.
     
    _________________________
  13. Seganapa

    Seganapa New Member

    Joined:
    8 Jun 2012
    Messages:
    74
    Likes Received:
    0
    Reputations:
    0
    Все перепробовал... Не получается!!!