PHP& cURL:是否可以在不解析标题的情况下将cookie转换为变量而不是文件?

时间:2014-02-28 14:54:28

标签: 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对我不起作用;我可能设法编写自己的正则表达式,但我想知道是否有可能直接将cookie保存到curl变量或我是否必须手动解析标题? (我希望能够使用变量rathen中的cookie来提供CURLOPT_COOKIEFILE而不是文件中的cookie)

1 个答案:

答案 0 :(得分:3)

让我们用一个卷曲手柄($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。这意味着它不会使用任何文件。因此,在第二次卷曲请求期间,它将使用之前调用的cookiejar。

一个问题:它会将cookie jar值打印到std-output。