У моей компании по сигнализации есть личная страница статуса, и я хочу программно войти на страницу статуса, чтобы получить некоторые статусы, используя PHP и cURL.
Однако форма входа в систему использует CSRF, поэтому моей первоначальной идеей было очистить сайт, получить значения полей и отправить их с помощью PHP и cURL и сохранить файлы cookie в файле cookie.
Проблема, насколько я понимаю, состоит в том, что сайт входа использует Backbone, и большая часть контента загружается с помощью JavaScript. Поэтому всякий раз, когда я пытаюсь получить данные, меня перенаправляют на страницу «Выберите свой язык», даже если мне удается войти в систему.
Страница, на которой я пытаюсь войти, https://mypages.verisure.com, и вот код, который у меня сейчас есть:
<?php
$username = '[email protected]';
$password = 'xx';
$loginUrl = 'https://mypages.verisure.com/j_spring_security_check?locale=no_NO';
// init curl
$ch = curl_init();
// set the url to work with
curl_setopt( $ch, CURLOPT_URL, $loginUrl );
// enable http post
curl_setopt( $ch, CURLOPT_POST, 1 );
// set the post parameters
curl_setopt( $ch, CURLOPT_POSTFIELDS, 'j_username=' . $username . '&j_password=' . $password . '&spring-security-redirect=%2Fno%2Fstart.html' );
// handle cookies for the login
curl_setopt( $ch, CURLOPT_COOKIEJAR, 'cookie.txt');
//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
//not to print out the results of its query.
//Instead, it will return the results as a string return value
//from curl_exec() instead of the usual true/false.
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
// execute the request
$store = json_decode( curl_exec( $ch ) );
if ( $store->status == 'ok' )
{
curl_setopt( $ch, CURLOPT_URL, 'https://mypages.verisure.com' . $store->redirectUrl );
$content = curl_exec( $ch );
var_dump( $content );
}
?>
$store
переменная содержит следующее:
{
"status": "ok",
"redirectUrl": "/no/start.html",
"message": null
}
Есть ли у вас какие-либо советы о том, как войти на сайт, который использует SSL и JavaScript.
CURL и PHP, вероятно, не являются подходящими инструментами, если требуется JavaScript. Вы можете попробовать PhantomJS вместо этого, это браузер без поддержки на основе Webkit, который можно использовать для автоматизации взаимодействия с веб-сайтами, даже если задействован JavaScript.
Других решений пока нет …