Php. cURL. Как получить и отправить cookie?


Отправка или получение cookie, при работе с cURL — не повседневная задача, но, тем не менее, достаточно вероятна. В этой статье — короткие примеры решения вопроса.

Как получить cookie?
Красивое решение подсмотрел здесь.

Итак, приведу пример.

$ch = curl_init('http://www.google.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec($ch);
// читаем куки здесь
preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $result, $matches);
$cookies = array();
foreach($matches[1] as $item) {
    parse_str($item, $cookie);
    $cookies = array_merge($cookies, $cookie);
}
var_dump($cookies);

Не будем останавливаться на принципах работы cURL в целом — для этого посмотрите статьи по этой теме здесь — обратим внимание лишь на место получения наших cookies.
«Магия» происходит в строке, обозначенной комментарием. В этом месте в ответе сервера мы находим header, в котором есть ключевая фраза Set-Cookie. Так как дальше их значения описываются в строго стандартизованном виде в формате «name-value;» — мы можем получить (при помощи регулярного выражения) ВСЕ полученные куки, а дальше разобрать их в цикле.

На выходе в массиве $cookies мы получим желаемый набор значений с названиями в ключе массива и значениями — в значении.

Как отправить cookie?
Отправка, в отличии от получения, занимает гораздо меньше места — всего одну строку. Поэтому я не буду приводить полный пример — ограничимся коротким примером:

# отпарвка вручную указанных значений
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: test=cookie"));

# отправка значений из файла
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);

Приведенные примеры, по сути, ничем не отличаются друг от друга. Разница лишь в том, что в первом случае мы вручную прописываем все значения, а во втором случае — читаем набор значений (в том же формате) из файла.

В случае, если Вам нужно отправить несколько кук — используйте разделитель — «точка с запятой» — например, «test1=v1;test2=v2;test3-v3». В этом случае будут переданы три куки.

Собственно это и есть основные моменты для отправки и получения cookies при помощи php и cURL.

Надеюсь статья пригодилась Вам и помогла разобраться с проблемой! Нет? Пишите в комментарии — постараюсь Вам помочь!

,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *