Answer the question
In order to leave comments, you need to log in
Why can't I log in with curl?
I'm not a programmer, so don't kick too much) I'm not going to steal or hack anything. We use redmine at work, I want to write a small parser to get certain fields from the task page to automate the counts. But I can’t log in, I try on the public demo redmine.
<?php
$url = 'http://demo.redmine.org/login';
$urlTo = '<?php
$url = 'http://demo.redmine.org/login';
$urlTo = 'http://demo.redmine.org/issues/80823';
$login = 'xxx';
$pass = 'xxx';
$y = '';
$post = 'utf8=' . $y . '&authenticity_token=&back_url=' . $urlTo . '&username=' . $login . '&password=' . $pass;
$ch = curl_init(); // Инициализируем сеанс CURL
curl_setopt($ch, CURLOPT_URL, $url); // Заходим на сайт
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Делаем так, чтобы страница не выдавалась сразу в поток, а можно было ее записать в переменную
$html = curl_exec($ch); // Имитируем заход на сайт
// 22222222222222222222222222
include_once('simple_html_dom.php');
$html = str_get_html($html);
$inputs = $html->find('head meta'); // Нашел все теги meta
$input = $inputs[4]; // опытным путем определил, что токен в пятом :)
$word = explode('"', $input); // поделил строку на слова
$token = $word[1];
echo $token; //вывел токен, реально совпадает)
$post2 = 'authenticity_token=' . $token . '&back_url=' . $urlTo . '&username=' . $login . '&password=' . $pass . '&l';
$ch = curl_init(); // Инициализируем сеанс CURL
curl_setopt($ch, CURLOPT_URL, $url); // Заходим на сайт
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //
//$html = curl_exec($ch); // Имитируем заход на сайт
curl_setopt($ch, CURLOPT_URL, $url); // Устанавливаем адрес куда будем слать POST данные
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/40.0.2214.111 Chrome/40.0.2214.111 Safari/537.36");
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // Записываем cookies в файл, чтобы потом можно было их считать
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // Теперь читаем cookies с файла
curl_setopt($ch, CURLOPT_POST, true); // Говорим, что информация будет отправляться методом POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $post2); // Передаем POST данные
$html = curl_exec($ch); // Записываем пришедшие данные в переменную
curl_close($ch); // Закрываем сеанс работы CURL
echo $html; // Вывожу страницу, вижу "Invalid form authenticity token.".
Мой запрос c php:
<img src="//habrastorage.org/files/902/c0c/b22/902c0cb229fa459a8a03b6552c632b4d.png" alt="image"/>
Запрос с браузера:
<img src="//habrastorage.org/files/c93/337/184/c9333718403049e9ad3177e5bc26552d.png" alt="image"/>
?>
Answer the question
In order to leave comments, you need to log in
Redmine stores data in a database.
What kind of brain dislocation does it take to try to access this data through HTML parsing and fake authorization? Instead of a couple of lines of SQL?
Literally, this is the removal of the tonsils through the *opu with an autogen. Those who have read PHP forums do not laugh at jokes.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question