我有一个 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/