PHP 和 curl : is it possible to get a cookie into variable instead of file without parsing headers?

标签 php curl

我有一个 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 直接保存到变量中,或者我是否必须手动解析 header ? (我希望能够用变量 rathen 中的 cookie 提供 CURLOPT_COOKIEFILE,而不是文件中的 cookie)

最佳答案

让我们用一个 curl handle($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 值打印到标准输出中。

关于PHP 和 curl : is it possible to get a cookie into variable instead of file without parsing headers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22098477/

相关文章:

PHPUnit Mock 似乎没有调用公共(public)函数

php - 如何在单独的表中分离 PDO 查询结果和回显

php - 如何修复 WooCommerce 中的 "Uncaught Error: Call to a member function get_tax_class() on null"?

php - 使用 YouTube API v3 PHP 删除视频

php - array_map 在类里面不起作用

php - 从多个复选框获取 POST 数据?

php - 从 CURL JSON 响应 php 数组中获取特定值

php - 如何在 PHP 中进行变量缓存

php - 如何使用 guzzle 发送具有超时限制的并发请求?

android - 将 cURL 转换为 Retrofit