Данная заметка не претендует на исчерпывающее руководство по PHP, cURL, протоколу HTTPS и Cookie. Если ыы ищете подобного рода информацию, то заходите на официальные сайты или ищите в Google
Просто хотелось показать один из возможных вариантов решения поставленной задачи: необходимо заходить роботом использующим cURL по протоколу HTTPS методом POST, выполнять действия в системе и выходить из системы. Данные о сессии пользователя хранятся в Cookie.
Я не буду вдаваться в подробности и публиковать полное решение, но выложу пример связки PHP + cURL + работа по протоколу HTTPS методом POST, а так же работа с данными Cookie.
Приведу часть примера, которая может решить подобную задачу:
<?php // вход в систему // имя хоста, куда будем заходить $hostname = 'your.seruce.host.com' ; // инициализация cURL // получать заголовки 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: // использовать метод 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 установленной по-умолчанию в командном интепретаторе.
Для начала хватит. Может быть напишу как-нибудь продолжение (если кому-то это будет интересно). В этом примере отсутсвует обработка возможных ошибок. Ее необходимо добавить в реальный пример. Код примера тупо без разбора не рекомендую использовать. Но если почитать документацию, то можно на основе этого примера решать задачи подобные той, что была описана выше.