【发布时间】:2015-02-28 18:58:44
【问题描述】:
几个月前,我的同事通过获取工作时间表创建了一个日历订阅。我相信他是通过 cURL 做到这一点的。
现在我正在建立一个网站来概述今天应该完成的任务。
我想检索时间表,以便可以使用它来显示在特定日期工作的人员的姓名。
我在网上找到了一个教程,该教程解释了我如何在登录后获取数据。 我所做的是我复制了登录表单中输入字段的名称,以及一个名为 signin[_csrf_token]
的隐藏字段的名称使用这些名称,我创建了以下代码:
<?php
$username = "myusername";
$password = "mypassword";
$url = "http://planner.a-mac.nl/employeeSchedule";
$cookie= "koekje.txt";
$token = "2e4c16f2b664f3ed01827dd38dc11d22";
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/'.$cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/'.$cookie);
curl_setopt($ch, CURLOPT_POSTFIELDS, "signin[username]=" . $username ."&signin[password]=" . $password . "&signin[_csrf_token]=" . $token);
//stuur de gegevens uit het formulier door naar de link
curl_exec($ch);
//Zet de output op het scherm
if (curl_errno($ch))
{
print curl_error($ch);
//Als er een fout is geef deze dan
}
else
{
curl_close($ch);
//Sluit de link met de website
}
?>
当我用上面的代码加载我的页面时,我得到带有错误消息的登录表单:
检测到 CSRF 攻击
有人可以帮我解决这个问题,以便我可以从网站获得哪些数据?
我联系了我的老同事,但他说“他不知道了”...
【问题讨论】:
-
永远不要手动构建 POST 数据字符串。为此目的有特殊功能:
http_build_query