Архив за Февраль 2009

Получение страницы с удаленного хоста: как отправить файл cookie

Допустим, нам надо получить страницу, которая требует, чтобы с запросом был послан файл cookie. Для этого воспользуемся расширением CURL:

<?php
$c = curl_init('http://www.example.com/needs-cookie.php');
curl_setopt($c, CURLOPT_COOKIE, 'user=evgenijj; activity=yes');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$page = curl_exec($c);
curl_close($c);
?>

Информация из cookie-файлов отправляется на сервер в заголовке Cookie. В рассмотреннном примере с помощью опции CURLOPT_COOKIE мы отправляем на сервер два элемента cookie: один с именем user и значением evgenijj, а другой — с именем activity и значением yes.

Чтобы запросить страницу, которая устанавливает cookie, а затем отправлять ей запросы с информацией из cookie-файлов, можно использовать функциональность расширения CURL, называемую “cookie jar” (контейнер для cookie). При первом запросе указываем в опции CURLOPT_COOKIEJAR имя файла, в котором хранятся cookie. В последующих запросах указываем в опции CURLOPT_COOKIEFILE имя этого файла, и CURL будет читать элементы cookies из него и отправлять их в запросе. Это особенно удобно, когда вы отправляете серию запросов, в которой первый запрос попадает на сайт, устанавливающий cookie для сеанса или для аутентификации, а последующие запросы должны содержать информацию из cookie, чтобы считаться законными:

<?php
// Временный файл для хранения cookie
$cookie_jar = tempnam('/tmp', 'cookie');

// Войти в систему на сайте
$c = curl_init('http://bank.example.com/login.php?user=donald&pasword=qwerty');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_COOKIEJAR, $cookie_jar);
$page = curl_exec($c);
curl_close($c);

// Получить информацию о балансе на счете
$c = curl_init('http://bank.example.com/balance.php?account=checking');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_COOKIEJAR, $cookie_jar);
$page = curl_exec($c);
curl_close($c);

// Внести вклад на счет
$c = curl_init('http://bank.example.com/deposit.php');
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, 'account=checking&amount=123.45');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_COOKIEJAR, $cookie_jar);
$page = curl_exec($c);
curl_close($c);

// Удалить "cookie jar"
unlink($cookie_jar);
?>

Ссылки по теме: