PHP - 使用cURL将cookie会话存储到变量/内存中

 blank 发布于 2023-01-30 14:59

我试图避免cURL通过"CURLOPT_COOKIEJAR"将cookie会话存储到实际文件中.所以我创建了一个方法来捕获/解析cookie到一个局部变量 - 然后通过"CURLOPT_COOKIE"来恢复cookie会话.

我通过切出饼干

preg_match_all("/^Set-cookie: (.*?);/ism", $header, $cookies);

要使用"CURLOPT_COOKIE",我们取key =值并通过";"分隔它们.但是(据我所知),CURLOPT_COOKIE不允许你输入各种标志即到期,安全标志等等.

2014年1月29日下午6:45更新

所以我认为我的问题实际发生在CURLOPT_FOLLOWLOCATION发生的地方.我不认为这与旗帜有关.看起来我的手动cookie会话在跟随新位置时更新(即网站有2-3个重定向以附加各种cookie /会话).这实际上是有意义的,因为利用CURLOPT_COOKIEJAR将直接获取/更新在头重定向上发送的cookie.因此,我尝试在抓取/附加最新cookie时创建手动重定向路径 - 但是这种方法由于某些原因无效.

2014年1月30日下午4:22更新

几乎得到了这个想法.将很快回复更新.事实证明我的方法完美无缺,只需要正确跳过手动重定向页面即可.

更新1/30/2014 4:51 pm 问题解决了 - 在下面回答了我自己.

1 个回答
  • 所以事实证明我实际上正确地做了这个,我的假设是正确的.

      将cookie会话保存在变量中(与CURLOPT_COOKIEJAR相比).*确保已启用CURLOPT_HEADER和CURLINFO_HEADER_OUT.*

      CURLOPT_FOLLOWLOCATION必须设置为false.否则你的cookie将无法正确发送(这是CURLOPT_COOKIEJAR最好的地方).

      使用preg_match_all提取cookie.然后使用strpos找到第一次出现的"=".有些网站使用编码并包含"=",这对"爆炸"无效.

      $data        = curl_exec($curl);
      $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
      $header      = substr($data, 0, $header_size);
      
      preg_match_all("/^Set-cookie: (.*?);/ism", $header, $cookies);
      foreach( $cookies[1] as $cookie ){
          $buffer_explode = strpos($cookie, "=");
          $this->cookies[ substr($cookie,0,$buffer_explode) ] = substr($cookie,$buffer_explode+1);
      }
      

      进行下一次curl调用时,将cookie var/object重新调用到CURLOPT_COOKIE.

      if( count($this->cookies) > 0 ){
          $cookieBuffer = array();
          foreach(  $this->cookies as $k=>$c ) $cookieBuffer[] = "$k=$c";
          curl_setopt($curl, CURLOPT_COOKIE, implode("; ",$cookieBuffer) );
      }
      

    这将允许您保持最新变量(即更改会话)完整.

    希望这有助于任何碰到这个问题的人!

    2023-01-30 15:02 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有