PHP с использованием CURL: есть ли способ эмулировать куки-файл вместо сохранения его в файл?

Я обращаюсь к службе REST api, которая использует переменную session_id. API требует, чтобы это было сохранено в файле cookie, и я выполняю это следующим образом:

$ch = curl_init(); // initialize curl handle curl_setopt($ch, CURLOPT_URL, $url); //set target URL curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);// allow redirects curl_setopt($ch, CURLOPT_COOKIEFILE, './Cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR, './Cookie.txt'); curl_setopt($ch, CURLOPT_POST, TRUE); // set POST method curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //set headers curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, TRUE); //return the headers so we can get session id curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //prevent unverified SSL certificate error curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //prevent unverified SSL "" $contents = curl_exec($ch); curl_close($ch); 

Теперь проблема заключается в том, что многие разные пользователи называют много раз. (так много разных файлов cookie должны быть сохранены). Мне бы хотелось просто сохранить session_id в переменной вместо ссылки на файл cookie. Пока все мои попытки отвергаются службой. Может ли кто-нибудь предложить методы для хранения идентификаторов сеансов и файлов cookie без сохранения их в файл? Обратите внимание, что чтение идентификатора сеанса не представляет проблемы, оно возвращается в XML. По какой-то причине передача его обратно без ссылки на фактический сгенерированный файл не передает учетные данные безопасности. Более подробная информация о том, почему это может быть, также будет полезна.

Solutions Collecting From Web of "PHP с использованием CURL: есть ли способ эмулировать куки-файл вместо сохранения его в файл?"

Куки-файлы – это простые текстовые заголовки, отправленные вместе с запросом. CURL позволяет вам напрямую CURLOPT_COOKIE .

 curl_setopt($ch, CURLOPT_COOKIE, 'key=value;anotherkey=anothervalue'); 

Если вы знаете, какую информацию отправлять, вы можете создать свой собственный заголовок cookie таким образом. Параметры COOKIEJAR / COOKIEFILE просто автоматизируют разбор, сохранение и отправку. Вам нужно будет сделать это вручную (прочитайте полученные заголовки Cookie, создайте заголовки Cookie для отправки), если вы не хотите писать в файл.

Здесь есть хороший пример,

http://sgjoomla.googlecode.com/svn/trunk/joomla/curltest.php

По какой-то причине часть файла cookie закомментирована, но весь код, который вам нужен, все еще существует.

В принципе, вы сами разбираете заголовки «Set-Cookie» и сохраняете значение cookie, делая это,

  curl_setopt ($ch, CURLOPT_HEADERFUNCTION, 'read_header'); 

Поместите значение cookie в глобальное. В следующем вызове установите его так,

  curl_setopt($ch, CURLOPT_COOKIE, "$cookieName=$cookieValue"); 

Я использую tempnam для создания уникального имени файла.

 $ckfile = tempnam ("/tmp", "cookieMyWeb"); curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile); 

Создайте новое имя файла перед использованием curl.