存储cURL cookie有什么好处吗?并提出相关问题

时间:2012-01-25 18:12:26

标签: php curl

我有一个cURL PHP脚本可以使用。它从我的学校网站获取我的日程安排。虽然有一件奇怪的事情:在我的webhost上它创建了cookie.txt而在我的localhost上却没有。

  • 为什么不在我的localhost上创建cookie?有什么建议?有相对路径和wampserver的东西吗?

后面的问题:

  • 是否有任何(速度)优势已经登录学校网站(存储cookie并因此保存cURL请求)?

我可以在第一个cURL请求之后检查,如果响应中有证据表明我已经登录。

如果上述问题的答案是:'不,这不会使脚本更快'我还有另一个问题:

  • 仅指定CURLOPT_COOKIEFILE选项是否最好?空值?那么没有饼干罐?

我不能给你我的登录信息,虽然这是脚本:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 
    'http://www.groenewoud.nl/infoweb/infoweb/index.php');
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);

$tokenSource = curl_exec($curl);
print_r (curl_getinfo($curl));
if (!$tokenSource) echo 'token problem';

// Get the token from within the source codes of infoweb.
preg_match('/name="csrf" value="(.*?)"/', $tokenSource, $token);
$postFields = array(
    'user'     => $userNum,
    'paswoord' => $userPass,
    'login'    => 'loginform',
    'csrf'     => $token[1]);
$postData = http_build_query($postFields);

curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);

$tableSource = curl_exec($curl);
print_r( curl_getinfo($curl));
if (!$tableSource) echo 'post problem';

curl_close($curl);

1 个答案:

答案 0 :(得分:1)

1)/cookie/cookie.txt表示您需要将cookie目录放在整个服务器的ROOT目录中。 cookie/cookie.txt(注意:没有前导斜杠)表示cookie目录将是脚本的CURRENT目录的子目录。例如。您的脚本在/a/b/c/中运行,然后您有/a/b/c/cookie/cookie.txt

2)对于速度优势,HTTP速度没有变化 - 你仍然坚持使用相同的管道和传输速率。但是最初让cookie可以在服务器上保存一些额外的命中来模拟登录序列,所以实际上会更快一点。

3)至于创建cookie,这完全取决于curl的设置。如果您没有指定cookie文件或cookie jar,它将不会创建或查找cookie文件。检查两个服务器之间的配置/编译选项,看看是否指定了另一个没有的curl默认值。

4)str_pos会比curl请求更快。把它想象成在冰箱里寻找食物与开车到杂货店之间的区别。冰箱是当地的,因此更快。

5)curlopt_cookiefile告诉curl在哪里存储新的cookie。 curlopt_cookiejar告诉curl从第一次启动时加载cookie的位置。它们可以是不同的文件,但不一定是。如果您想保留一些“干净”的基线cookie,那么您使用cookiejar = newstuff.txt和cookiejar = baseline.txt。一旦设置了适当的cookie环境,就可以将cookiejar重置为newstuff.txt,以便进行后续的curl运行。