【问题标题】:PHP using CURL: is there a way to emulate a cookie instead of saving it to a file?PHP 使用 CURL:有没有办法模拟 cookie 而不是将其保存到文件中?
【发布时间】:2010-12-23 20:43:51
【问题描述】:

我访问了一个 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 文件的方法。到目前为止,我的所有尝试都被服务拒绝了。任何人都可以建议在不将其保存到文件的情况下存储会话 ID 和 cookie 信息的方法吗?请注意,读取会话 id 没有问题,它以 XML 形式返回。出于某种原因,在不引用实际生成的文件的情况下将其传回不会传递安全凭据。关于为什么会这样的更多信息也会有所帮助。

【问题讨论】:

    标签: php rest curl


    【解决方案1】:

    我使用tempnam 来生成唯一的文件名。

    $ckfile = tempnam ("/tmp", "cookieMyWeb");
    curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile); 
    

    在使用 curl 之前生成一个新的文件名。

    【讨论】:

      【解决方案2】:

      Cookie 是随请求一起发送的简单文本标头。 CURL 允许您直接使用 CURLOPT_COOKIE 指定那些。

      curl_setopt($ch, CURLOPT_COOKIE, 'key=value;anotherkey=anothervalue');
      

      如果您知道要发送什么信息,您可以通过这种方式构建自己的 cookie 标头。 COOKIEJAR/COOKIEFILE 选项只是自动解析、保存和发送。如果您不想写入文件,则必须手动执行此操作(读取收到的 Cookie 标头,创建要发送的 Cookie 标头)。

      【讨论】:

      【解决方案3】:

      这里有一个很好的例子,

      http://sgjoomla.googlecode.com/svn/trunk/joomla/curltest.php

      由于某种原因,cookie 部分已被注释掉,但您需要的所有代码仍然存在。

      基本上,您自己解析“Set-Cookie”标头并通过这样做来保存 cookie 值,

        curl_setopt ($ch, CURLOPT_HEADERFUNCTION, 'read_header');
      

      将 cookie 值放在一个全局变量中。下次调用时,这样设置,

        curl_setopt($ch, CURLOPT_COOKIE, "$cookieName=$cookieValue");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-07
        • 2016-11-24
        • 2021-12-18
        • 2021-11-15
        • 2011-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多