PHP с помощью CURL: есть ли способ эмулировать файл cookie вместо того, чтобы сохранять его в файл?



Я обращаюсь к службе 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. До сих пор все мои попытки отвергаются службой. Может ли кто-нибудь предложить методы хранения идентификатор сеанса и информация о куки-файлах без сохранения их в файл? Обратите внимание, что чтение идентификатора сеанса не является проблемой, он возвращается в XML. По какой-то причине передача его обратно без ссылки на фактический сгенерированный файл не передает учетные данные безопасности. Любая дополнительная информация о том, почему это может быть, также будет полезна.

547   3  

3 ответов:

Файлы cookie - это простые текстовые заголовки, отправляемые вместе с запросом. 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

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

В основном, вы сами разбираете заголовки "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.

Comments

    Ничего не найдено.