Отправка или получение 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.
Надеюсь статья пригодилась Вам и помогла разобраться с проблемой! Нет? Пишите в комментарии — постараюсь Вам помочь!