gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:15:34 24 4
gpt4 key购买 nike

我试图避免 cURL 通过“CURLOPT_COOKIEJAR”将 cookie session 存储到实际文件中。所以我创建了一个方法来将 cookie 捕获/解析到一个局部变量中——然后通过“CURLOPT_COOKIE”使用它来恢复 cookie session 。

我通过

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

要使用“CURLOPT_COOKIE”,我们采用 key=value 并通过“;”分隔它们。但是(据我所知),CURLOPT_COOKIE 不允许您输入各种标志,即过期、安全标志等。

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

所以我认为我的问题实际上发生在 CURLOPT_FOLLOWLOCATION 发生的地方。我认为这与旗帜无关。在跟随新位置时,我的手动 cookie session 似乎没有更新(即站点有 2-3 个重定向以附加各种 cookie/ session )。这实际上是有道理的,因为利用 CURLOPT_COOKIEJAR 将直接获取/更新在 header 重定向上发送的 cookie。因此,我尝试在抓取/附加最新的 cookie 时创建手动重定向路径 - 但是由于某些简单的原因,此方法不起作用。

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

差不多搞清楚了。将很快更新答案。事实证明我的方法工作得很好,只是正确地跳过手动重定向页面的问题。

2014 年 1 月 30 日下午 4:51 更新问题已解决——在下面回答了我自己。

最佳答案

事实证明,我的做法是正确的,而且我的假设是正确的。

  1. 将 cookie session 保存在一个变量中(相对于 CURLOPT_COOKIEJAR)。 *确保您已启用 CURLOPT_HEADER 和 CURLINFO_HEADER_OUT。*

  2. CURLOPT_FOLLOWLOCATION 必须设置为 false。否则您的 cookie 将无法正确发送(这是 CURLOPT_COOKIEJAR 最擅长的地方)。

  3. 使用 preg_match_all 提取 cookie。然后使用 strpos 查找第一次出现的“=”。一些站点使用编码并包含“=”,这不适用于“explode”。

    $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);
    }
  4. 在进行下一次 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) );
    }

这将使您能够保持最新变量(即更改 session )不变。

希望这对遇到此问题的任何人有所帮助!

关于PHP - 使用 cURL 将 cookie session 存储到变量/内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21442976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com