You are hereБлоги / Ёж's blog / Использование cURL, часть 2

Использование cURL, часть 2


Ёж 09 December 2008

Итак, продолжу изучение параметров функции 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;
?>

Вот – программа работает. Иначе и быть не могло :).

Спасибо за внимание.

Ёж.

]]>]]>
ССылки

RSS-материал