Как мне перенести cookie в файл Netscape с помощью CURL PHP?

#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 из этого файла.