2014-10-30 15 views
0

Мне нужно создать скрипт для входа на сайт. Сказав это, я собираюсь захватить токен CSRF со страницы входа и отправьте его в URL-адрес действия входа. [Принято данных в формате JSON.]Получить токен CSRF со страницы & POST его

Это метод Логин:

public function login() 
{ 
    $login = 'https://XXXXXXXXXXXXXXXXXXX'; 
    $csrf = $this->token(); 
    $data = array(
     "email" => '[email protected]', 
     "password" => '123456', 
     "displayType" => 'json', 
     "csrf" => $csrf 
    ); 
    $json = json_encode($data); 
    $ch = curl_init($login); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_HEADER, true); // For debugging purposes 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    $result = curl_exec($ch); 
    return $result; 
} 

А вот лексема метод граббер:

public function token() 
{ 
    $source = $this->get("https://OOOOOOOOOOOOOOOOOOO"); 
    $dom = new DOMDocument(); 
    $dom->loadHTML($source); 
    $dxp = new DOMXpath($dom); 
    $csrf = $dxp->query('//input[@name="csrf"]/@value')->item(0)->value; 
    return $csrf; 
} 

Токен успешно извлечен, но изменяется при каждом вызове в пределах той же сессии. Почему?! Я инициализирует сеанс таким образом:.

public function __construct($url) 
{ 
    if(session_status() == PHP_SESSION_NONE) 
     session_start(); 
    ... 
} 
+0

Я не вижу, что вы проходя любой идентификатор сессии на удаленный сайт ... или что должно содержаться в URL в ' $ login' или заголовки, которые вы передаете? – CBroe

ответ

0

Конечно $ this-> получить (и ваша функция Войти использовать разные «сессии» на веб-сайте под названием вам нужно хранить печенье с сессиями и повторное использование . то же самое Вам нужно переписать функцию ПОЛУЧИТЬ с скручиваются и добавьте следующие строки:

$cookie_path = 'mycookie.txt'; 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_path); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_path); 
Смежные вопросы