我访问一个使用名为session_id的变量的REST api服务.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);
Run Code Online (Sandbox Code Playgroud)
现在的问题是许多不同的用户在很多不同的时间调用它.(必须保存许多不同的cookie文件)我想要一种简单地将session_id存储在变量中而不是引用cookie文件的方法.到目前为止,我的所有尝试都被服务拒绝了.任何人都可以建议存储会话ID和cookie信息的方法,而不保存到文件?请注意,读取会话ID没有问题,它以XML格式返回.由于某种原因,在不引用实际生成的文件的情况下将其传回但未通过安全凭证.关于为什么会这样做的任何更多信息也会有所帮助.
dec*_*eze 21
Cookie是与请求一起发送的简单文本标头.CURL允许您直接指定使用CURLOPT_COOKIE.
curl_setopt($ch, CURLOPT_COOKIE, 'key=value;anotherkey=anothervalue');
Run Code Online (Sandbox Code Playgroud)
如果您知道要发送哪些信息,则可以通过这种方式构建自己的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');
Run Code Online (Sandbox Code Playgroud)
将cookie值放在全局中.在下一个电话中,将其设置为这样,
curl_setopt($ch, CURLOPT_COOKIE, "$cookieName=$cookieValue");
Run Code Online (Sandbox Code Playgroud)