请问如何将php curl中的cookie转换为变量

如何将php curl中的cookie转换为变量

因此,其他公司的一些人认为,如果他不使用SOAP、XMLRPC或REST或任何其他合理的通信协议,而是将所有的响应作为cookie嵌入到报头中,那就太棒了。

我需要把这些cookie作为希望从这个卷曲响应数组。如果我不得不为此浪费我的一生,写一个解析器,我会非常不高兴。

有没有人知道如何简单地做到这一点,最好不要将任何东西写入文件?

如果有人能帮我解决这个问题,我将非常感激。


鸿蒙传说
浏览 341回答 3
3回答

动漫人物

虽然这个问题很老,并且接受的响应是有效的,但我发现它有点不适应,因为HTTP响应的内容(HTML、XML、JSON、二进制或其他什么)会与标头混合。我找到了另一种选择。curl提供了一个选项(CURLOPT_HEADERFUNCTION)来设置将为每个响应头行调用的回调。该函数将接收curl对象和带有标头行的字符串。您可以使用这样的代码(改编自TML响应):$cookies = Array();$ch = curl_init('  // Ask for the callback.curl_setopt($ch, CURLOPT_HEADERFUNCTION, "curlResponseHeaderCallback"); $result = curl_exec($ch);var_dump($cookies);function curlResponseHeaderCallback($ch, $headerLine) {     global $cookies;     if (preg_match('/^Set-Cookie:\s*([^;]*)/mi', $headerLine, $cookie) == 1)         $cookies[] = $cookie;     return strlen($headerLine); // Needed by curl}这个解决方案的缺点是使用全局变量,但我想这不是短脚本的问题。如果curl被包装到类中,则始终可以使用静态方法和属性。

小怪兽爱吃肉

这样做时不需要regexp,但需要PECL HTTP扩展.curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 1); $result = curl_exec($ch);curl_close($ch);$headers = http_parse_headers($result); $cookobjs = Array();foreach($headers AS $k => $v){     if (strtolower($k)=="set-cookie"){         foreach($v AS $k2 => $v2){             $cookobjs[] = http_parse_cookie($v2);         }     }}$cookies = Array();foreach($cookobjs AS $row){     $cookies[] = $row->cookies;}$tmp = Array();// sort k=>v formatforeach($cookies AS $v){     foreach ($v  AS $k1 => $v1){         $tmp[$k1]=$v1;     }}$cookies = $tmp;print_r($cookies);
打开App,查看更多内容
随时随地看视频慕课网APP