За последние 24 часа нас посетили 49228 программистов и 1758 роботов. Сейчас ищут 834 программиста ...

cURL и авторизация на сайте с определением ID пользователя..

Тема в разделе "Прочие вопросы по PHP", создана пользователем TeQ, 18 май 2007.

  1. TeQ

    TeQ Активный пользователь

    С нами с:
    18 май 2007
    Сообщения:
    1
    Симпатии:
    0
    Доброго времени суток, коллеги!

    Ситуация следующая: есть сайт, который крутится на Java-сервере. Вход и аутентификация состоит из следующих этапах (следующее может показаться смешным, но это выжно):

    • Загрузка прелоадела: определение параметров дисплея и передача через POST (это пройдено)
      Далее нужно пройти аутентификацию. (тут загвоздка)

    В чом именно загвоздка? Она в следующем, во время формирования станицы аутентификации присваисвается идентификатор, если можно назвать страницы, обращения и т.п., и он меняется при каждом обновлении страницы. После ввода логина и пароля отправляется дополнительно и это ID. А у меня не получается корректно отловить и отправить этот ID. Может будут какие-то идеи? Смотреть код ниже.

    Код (Text):
    1.  
    2.     private function getHTML_POST($sURL, $sOut='HTML')
    3.     {
    4.         $this->print_value("Начало POST", 'вход на сайт', ' ', 10, 100);
    5.        
    6.         // присваиваю параметры дисплея (могут быть любые, в пределах разумного конечно) =)
    7.         $arrPost = array('client_data'=>"", 'res_h'=>"800", 'res_w'=>"600");
    8.  
    9.         $ch = curl_init();
    10.         // установка URL и других необходимых параметров
    11.         curl_setopt($ch, CURLOPT_URL, $sURL);
    12.         curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0;)");
    13.         curl_setopt($ch, CURLOPT_HEADER, 0);
    14.         curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIE_FILE_PATH);
    15.         curl_setopt ($ch, CURLOPT_COOKIEFILE, COOKIE_FILE_PATH);
    16.        
    17.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    18.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    19.        
    20.         curl_setopt($ch, CURLOPT_POST, 1);
    21.         curl_setopt($ch, CURLOPT_POSTFIELDS, $arrPost);
    22.        
    23.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    24.  
    25.         // загрузка страницы и выдача её браузеру
    26.         $sOUT = curl_exec($ch);
    27.        
    28. //----------------------------------------------------------------------------------------------------//
    29.         // в этом блоке я пробую отправить данные аутентификации
    30.         // с полученным ID при сохраненныом подключении cURL...
    31.  
    32.  
    33.         $this->print_value("Второй POST", 'аутентификация', ' ', 10, 100);
    34.        
    35.         $sOutHTML = $sOUT;
    36.         $sRequestID = $this->getRequestID($sOutHTML);
    37.         $this->print_value("<b>-></b> sRequestID[1]", $sRequestID, '&nbsp;', 25, 40);
    38.                                                                                                            логин                     пароль
    39.         $arrPost = array('request_id'=>"$sRequestID", 'p619889017'=>"жо", 'p_2051346805'=>"па");
    40.         curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIE_FILE_PATH);
    41.         curl_setopt ($ch, CURLOPT_COOKIEFILE, COOKIE_FILE_PATH);
    42.        
    43.         curl_setopt($ch, CURLOPT_POST, 1);
    44.         curl_setopt($ch, CURLOPT_POSTFIELDS, $arrPost);
    45.  
    46.         // загрузка страницы и присвоим ее в переменную $sOUT
    47.         $sOUT = curl_exec($ch);
    48.        
    49.         $sOutHTML = $sOUT;
    50.         $sRequestID = $this->getRequestID($sOutHTML);
    51.         $this->print_value("<b>-></b> sRequestID[2]", $sRequestID, '&nbsp;', 25, 40);
    52.        
    53.         $this->print_value("Конец POST", 'просмотр информации', '&nbsp;', 10, 100);
    54. //----------------------------------------------------------------------------------------------------//
    55.        
    56.         if(strtoupper($sOut) == strtoupper('text') )
    57.         {
    58.             $sOUT = htmlspecialchars($sOUT);
    59.         }
    60.        
    61. //      $this->print_arr(curl_getinfo($ch), 'curl_getinfo');
    62.        
    63.         // завершение сеанса и освобождение ресурсов
    64.         curl_close($ch);
    65.        
    66.         return $sOUT;
    67.     }
    68.  
    69.     // данная функция возвращает  ID
    70.     private function getRequestID($sHTML)
    71.     {
    72.         $this->objXML = new DOMDocument();     
    73.         $this->objXML->loadHTML($sHTML);
    74.         $sAttrValue = 'request_id';
    75.        
    76.         $objElemList = $this->objXML->getElementsByTagName('input');
    77.        
    78.         if(count($objElemList) != 0)
    79.         {
    80.             foreach ($objElemList as $param) {
    81.                     if($sAttrValue == $param->getAttribute('id'))
    82.                     {
    83.                         $sTagValue = $param->getAttribute('value');
    84.                        
    85.                     }
    86. //                  $this->print_value("ID", $param->getAttribute('id'), '&nbsp;', 25, 50);
    87. //                  $this->print_value("Name", $param->getAttribute('name'), '&nbsp;', 25, 50);
    88. //                  $this->print_value("Value", $param->getAttribute('value'), '&nbsp;', 25, 50);
    89. //                  echo '<br>';
    90.             }
    91.         }
    92.        
    93.        
    94.         unset($this->objXML); // убиваем, чтобы не мешался
    95.         return $sTagValue;
    96.     }
    Получается (ID) sRequestID[1] и sRequestID[2] всегда разные :cry: при том, что отправляю POST"ы во время одного "сеанса" cURL...

    Заранее всем благодарен!