Получить _csrf-backend и авторизоваться

180
29 августа 2018, 20:10

Хочу авторизоваться cURL'ом на странице и получить с нее данные. Заметил что при авторизации, точнее при переходе на сайт, генерируется каждый раз новое значение _csrf-backend , и когда ввести логин/пароль и нажать Войти - POST'ом передается этот самый сгенерированный _csrf-backend.

В форме он так выглядит:

<input type="hidden" name="_csrf-backend" value="m_C6kJjl6jmbREgSHpCAwIs8JkfekqhTtN7Lt1a-ftOqwdj2_4O6Ya4AL3dSovWC_nJ8IJfDmxHlkqXYD_Mc5Q==">

Еще я заметил что он есть в шапке сайта

<meta name="csrf-param" content="_csrf-backend"><meta name="csrf-token" content="m_C6kJjl6jmbREgSHpCAwIs8JkfekqhTtN7Lt1a-ftOqwdj2_4O6Ya4AL3dSovWC_nJ8IJfDmxHlkqXYD_Mc5Q==">

Как мне его получить до того как cURL будет авторизовываться на сайте (ну и подставить для авторизации).

Вот моя функция:

function login($url, $login, $pass){
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_REFERER, $url);
   curl_setopt($ch, CURLOPT_VERBOSE, 0);
   curl_setopt($ch, CURLOPT_POST, 1);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($ch, CURLOPT_POSTFIELDS,"LoginForm[email]=".$login."&LoginForm[password]=".$pass."&_csrf-backend=".$csrf."&login-button=");
   curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");
   curl_setopt($ch, CURLOPT_HEADER, 1);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
   $result=curl_exec($ch);
   curl_close($ch);
   return $result;
}

Буду благодарен за помощь.

Answer 1

Попробуйте так вывести. Если вернет то это yii2

function login($url, $login, $pass){
   $csrf = Yii::$app->request->getCsrfToken();
   echo $csrf; die;
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_REFERER, $url);
   curl_setopt($ch, CURLOPT_VERBOSE, 0);
   curl_setopt($ch, CURLOPT_POST, 1);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($ch, CURLOPT_POSTFIELDS,"LoginForm[email]=".$login."&LoginForm[password]=".$pass."&_csrf-backend=".$csrf."&login-button=");
   curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");
   curl_setopt($ch, CURLOPT_HEADER, 1);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
   $result=curl_exec($ch);
   curl_close($ch);
   return $result;
}
READ ALSO
Вывод постов по их id

Вывод постов по их id

Как вывести определённые посты по их id? Делаю так:

187
Получить значение value до отправки формы

Получить значение value до отправки формы

При переходе на страницу есть скрытое поле ввода, в котором уже есть какое-то значениеВопрос - как его получить до отправки формы? может быть...

156
Как вырезать все атрибуты кроме src,href

Как вырезать все атрибуты кроме src,href

Задача в заголовкеВот код

235
Почему не работает код

Почему не работает код

Код должен убирать строки с 1 символом, но выводит пустой документ

179