#curl
#curl
Вопрос:
Существует переменная, которая хранит файлы cookie:
$cookie = 'session=123;gate=kUwp1keS7kmBjF0rQfEAKbbdR;id=3GYAN';
Моя задача состоит в том, что мне нужно записать эти файлы cookie в CURL с Netscape HTTP Cookie File
помощью CURL. Я делаю это так:
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt');
Но в файл ничего не записывается. У вас есть права на запись, путь указан правильно. Вы, вероятно, не можете просто сделать это. Как я могу записать
Ответ №1:
curl не будет записывать cookie в файл, который он не получил в ответе, но вы можете просто записать их в файл самостоятельно, чтобы curl прочитал их при использовании CURLOPT_COOKIEFILE
.
Веб-сайт curl описывает формат файла cookie, который он использует при сохранении файлов cookie, как:
Формат файла cookie основан на тексте и хранит по одному файлу cookie в строке. Строки, начинающиеся с #, рассматриваются как комментарии.
Каждая строка, в которой указывается один файл cookie, состоит из семи текстовых полей, разделенных символами табуляции. Допустимая строка должна заканчиваться символом новой строки. Поля в файле
Номер поля, какой тип и пример данных и его значение:
string example.com - the domain name` boolean FALSE - include subdomains string /foobar/ - path boolean TRUE - send/receive over HTTPS only number 1462299217 - expires at - seconds since Jan 1st 1970, or 0 string person - name of the cookie string daniel - value of the cookie
Должно работать что-то вроде следующего:
<?php
$cookieFile = dirname(__FILE__).'/cookie.txt';
$cookie = 'session=123;gate=kUwp1keS7kmBjF0rQfEAKbbdR;id=3GYAN';
$domainName = '.example.com'; // note leading '.'
$includeSubdomains = 'TRUE';
$path = '/'; // path for cookies
$secure = 'TRUE';
$expires = 0;
$cookies = explode(';', $cookie);
foreach($cookies as $c) {
list($name, $value) = explode('=', $c, 2);
$line = sprintf(
"%st%st%st%st%dt%st%sn",
$domainName,
$includeSubdomains,
$path,
$secure,
$expires,
$name,
$value
);
file_put_contents($cookieFile, $line, FILE_APPEND);
}
Примечание: код не проверяет, существует ли файл cookie с таким именем в файле.
Перед выполнением запроса запишите файлы cookie в файл с приведенным выше кодом и укажите файл, с CURLOPT_COOKIEFILE
помощью которого curl будет загружать файлы cookie из этого файла.