Данная заметка не претендует на исчерпывающее руководство по PHP, cURL, протоколу HTTPS и Cookie. Если ыы ищете подобного рода информацию, то заходите на официальные сайты или ищите в Google 😉
Просто хотелось показать один из возможных вариантов решения поставленной задачи: необходимо заходить роботом использующим cURL по протоколу HTTPS методом POST, выполнять действия в системе и выходить из системы. Данные о сессии пользователя хранятся в Cookie.
Я не буду вдаваться в подробности и публиковать полное решение, но выложу пример связки PHP + cURL + работа по протоколу HTTPS методом POST, а так же работа с данными Cookie.
Приведу часть примера, которая может решить подобную задачу:
<?php // вход в систему // имя хоста, куда будем заходить $hostname = 'your.seruce.host.com'; // инициализация cURL $ch = curl_init('https://'.$hostname.'/index.php'); // получать заголовки curl_setopt($ch, CURLOPT_HEADER, 1); // если ведется проверка HTTP User-agent, то передаем один из возможных допустимых вариантов: curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3'); // елси проверятся откуда пришел пользователь, то указываем допустимый заголовок HTTP Referer: curl_setopt($ch, CURLOPT_REFERER, 'https://'.$hostname.'/index.php'); // использовать метод POST curl_setopt($ch, CURLOPT_POST, 1); // сохранять информацию Cookie в файл, чтобы потом можно было ее использовать curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // передаем поля формы curl_setopt($ch, CURLOPT_POSTFIELDS, 'user=your_robot&pass=Your_R0b0t!PassWd1&mod=Login'); // возвращать результат работы curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // не проверять SSL сертификат curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // не проверять Host SSL сертификата curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // это необходимо, чтобы cURL не высылал заголовок на ожидание curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); // выполнить запрос curl_exec($ch); // получить результат работы $result = curl_multi_getcontent ($ch); // вывести результат echo "\n".'Login OK'."\n".'[result ===8<===>'."\n".$result."\n".'<===>8=== result]'."\n"; // закрыть сессию работы с cURL curl_close($ch);
Вот мы и вошли в систему. ID сессии, которая передается в Cookie храним в файле, который мы передали в параметре CURLOPT_COOKIEJAR. Результат работы: заголовки + тело страницы получаем и выводим из переменной $result. Пока сессия не закончится можем выполнять необходимые действия в системе.
Если вывод будет идти в командную строку Windows, а кодировка системы с которой идет работа: cp1251, то можно воспользоваться спобом описанным в заметке «chcp — изменение кодовой страницы cmd.exe», чтобы видеть вывод в нормальной кодовой странице, а не древнечукотские манскрипты cp866 установленной по-умолчанию в командном интепретаторе.
Для начала хватит. Может быть напишу как-нибудь продолжение (если кому-то это будет интересно). В этом примере отсутсвует обработка возможных ошибок. Ее необходимо добавить в реальный пример. Код примера тупо без разбора не рекомендую использовать. Но если почитать документацию, то можно на основе этого примера решать задачи подобные той, что была описана выше.