我有一个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)
答案 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。