我有一个cURL PHP
脚本可以使用。它从我的学校网站获取我的日程安排。虽然有一件奇怪的事情:在我的webhost上它创建了cookie.txt而在我的localhost上却没有。
后面的问题:
我可以在第一个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);
答案 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运行。