【问题标题】:PHP & cURL: is it possible to get a cookie into variable instead of file without parsing headers?PHP & cURL:是否可以在不解析标头的情况下将 cookie 放入变量而不是文件中?
【发布时间】:2014-04-01 15:37:21
【问题描述】:

我有一个 php 代理服务器,电子邮件和密码在开始时发布(登录)。然后我使用

$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $myvars);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookieJar);
curl_setopt( $ch, CURLOPT_HEADER, 1);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);

转发到一些需要某些参数的 API。如您所见,我将 cookie 保存在 cookie jar 文件中。

然后我可以使用这个 cookie 文件来调用任何其他请求到代理 -> API 并成功获得响应。一切正常。我用

curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookieJar);

在用户成功登录后提出其他请求。

问题是当时只有一个用户可以登录(并调用其他请求),因为只有一个 cookie jar 文件。我可能会在代理上生成唯一的 cookie 文件,并通过每个用户的每个新请求以某种方式访问​​它们。但这对服务器来说是一个负担,绝对不是一个好主意。

所以我想做的是将接收到的cookie保存到变量而不是文件中,然后将其发送给用户......

This 不幸地对我不起作用;我可能可以设法编写自己的正则表达式,但我想知道是否有可能使用 curl 直接将 cookie 保存到变量中,或者我是否必须手动解析标头? (我希望能够用变量中的 cookie 而不是文件中的 cookie 来提供 CURLOPT_COOKIEFILE)

【问题讨论】:

标签: php curl


【解决方案1】:

让我们用一个 curl 句柄来试试这个($ch):

提出我的第一个请求:

$url= "http://www.google.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, '-'); // <-- see here
$result = curl_exec($ch);

// remember i didn't close the curl yet!    

现在用相同的句柄发出另一个 curl 请求:

$url= "http://www.google.com";
curl_setopt($ch, CURLOPT_URL,$url);
$result = curl_exec($ch);
// if you are done, you can close it.
curl_close($ch);

在这个例子中,我使用了- 作为cookiejar。这意味着它不会使用任何文件。因此,在第二次 curl 请求期间,它将使用上一次调用的 cookiejar。

一个问题:它将cookie jar 值打印到标准输出中。

【讨论】:

  • 感谢您的回答。不创建文件是一件好事,但不幸的是它不能解决我将 cookie 存储到变量中的问题,所以我可以发送它并在客户端设置它
猜你喜欢
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多