Использование cURL, часть 2
Итак, продолжу изучение параметров функции curl_setopt(), которое я начал в первой cтатье Использование cURL. Напишу программу для авторизации на каком-либо сайте и попутно подробно остановлюсь на каждом из параметров функции curl_setopt().
Первое, что Вам нужно сделать для того, чтобы написать программу автоматической авторизации – это установить сниффер, с помощью которого можно отследить данные, которые передаются методом POST, и затем эмулировать передачу этих данных в своей программе на cURL. Лично я пользуюсь программой IEWatch для Internet Explorer и рекомендую её Вам. При авторизации методом POST например передаются имя пользователя и пароль, возможно какие-нибудь ещё параметры – на каждом сайте по-разному – одним словом, без сниффера никуда.
Пару слов о том, как пользоваться программой IEWatch. Запускаете программу и проходите авторизацию на веб-сайте так, как обычно вы это делаете. Программа IEWatch отслеживает все передаваемые Вами данные, и на вкладке Post Data для данных передаваемых методом POST – вы можете увидеть все параметры, которые передаются веб-серверу, на котором Вам необходимо пройти авторизацию.
Теперь буду писать программу для авторизации. Параметры функции curl_setopt(), которые мне необходимо задать для правильной работы моей программы:
CURLOPT_POST – этот параметр нужен для того, чтобы эмулировать передачу данных методом POST. Обязательно установите параметр в ненулевое значение, для того чтобы передать пароль и остальные необходимые поля.
CURLOPT_POSTFIELDS – параметр передаёт поля, содержащие полные данные, которые передаются методом POST. Можно для удобство записать эти данные в переменную. Именно здесь Вы передаёте поля, полученные Вами от сниффера – имя пользователя, пароль и так далее.
CURLOPT_COOKIEJAR – параметр нужен для того, чтобы записывать куки (cookies), получаемые от сервера, с тем, чтобы потом передать эти куки серверу при авторизации. Куки записываются в текстовый файл, причём данный файл совсем не обязательно создавать самостоятельно. Я использовал при работе с этим параметром встроенную переменную PHP $DOCUMENT_ROOT – эта переменная указывает на основание дерева документов веб-сервера. В целях повышения безопасности Вашего сайта рекомендую вам использовать эту переменную – с её помощью можно указывать на каталог, который находится вне дерева документов Вашего веб-сервера – то есть Вы можете задавать относительный путь для любого файла.
CURLOPT_COOKIEFILE – когда Вы будете заходить на веб-страницу как авторизованный пользователь, с помощью этого параметра нужно передать куки, которые до этого были записаны с помощью параметра COOKIEJAR. Без этого процедуру автоматической авторизации пройти не удастся.
CURLOPT_RETURNTRANSFER – необязательный параметр в данной программе, но я использую его для удобства. Вы должны передать в этом параметре ненулевое значение, если хотите, чтобы cURL непосредственно возвращала трансфер, вместо его печати напрямую. Как это работает? Например Вы используете вот такой фрагмент кода
$result = curl_exec($ch);
Так вот, если Вы установите параметр CURLOPT_RETURNTRANSFER=1, то вся получаемая Вами страница будет сохраняться в переменной $result, и затем в дальнейшем Вы сможете манипулировать этой переменной в программе так, как Вам это заблагорассудится. Это очень удобно. Но, повторюсь – в данной программе этот параметр не обязателен.
Ну что ж, а теперь я пишу мою программу:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://example.com/personal/login.phtml"); /* Переходим на страницу, на которой нужно пройти процедуру авторизации */
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=mylog&psw=mypassword"); /* Внимание! Здесь необходимо передать параметры, полученные Вами от сниффера – параметры разделяются знаком & */
curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
$result = curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, "http://example.com"); /* Теперь заходите на сайт как авторизованный пользователь – в данном случае нужно вместо example.com указать URL страницы, на которую может попасть только авторизованный пользователь */
curl_setopt($ch, CURLOPT_POST, 0); /* Также необязательное действие, но я указал этот параметр – устанавливаю CURLOPT_POST в нуль, ведь теперь мне не нужно передавать данные методом POST */
curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt'); /* Внимание! Здесь третий параметр (адрес текстового файла с куками) должен быть точно таким же, как и при использовании CURLOPT_COOKIEJAR, иначе процедура авторизации работать не будет, так как требуемые серверу Куки не передадутся */
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
Вот – программа работает. Иначе и быть не могло :).
Спасибо за внимание.
Ёж.


