我正在尝试进行首次网站回归测试。站点后端由几个PHP脚本组成。所以我只是使用cURL一个接一个地调用所有PHP文件,使用各种有效和无效的输入并检查结果。一切正常,直到我达到基于会话的身份验证管理。我看到,使用cURL时,_SESSION的工作方式与浏览器中对PHP的正常调用方式不同(见下文)。如果我理解正确,这是因为会话功能需要在客户端使用cookie,这在我使用cURL的情况下会丢失(我希望它会自动发生)。那么如何让cURL处理cookie并调用php文件,就像浏览器调用一样?
在下面的示例中,我希望看到" test"但是我看到" SESSION未设置"代替。
调用文件:
<?php
session_start();
$_SESSION["test"] = "test";
echo sendPost('https://rodichi.net/sandbox/php/test_curl_session_called.php', null);
function sendPost($url, $data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
if ($result === false) {
die(curl_error($ch));
}
curl_close($ch);
return $result;
}
调用文件:
<?php
session_start();
if (isset($_SESSION['test'])) {
echo($_SESSION['test'].'<br>');
} else {
echo 'SESSION not set<br>';
}
答案 0 :(得分:1)
cURL将透明地为您处理cookie,但为了使它们持久存在,它们需要保存到文件中,或者您需要在后续请求中重复使用相同的cURL句柄,以便发送cookie。 / p>
您可以通过调用以下方式启用Cookie处理:
curl_setopt($ch, CURLOPT_COOKIEFILE, ''); // enable cookie handling
然后你会发出如下命令:
curl_setopt($ch, CURLOPT_URL, 'http://some_url_that_sets_cookies');
$result = curl_exec($ch);
// without calling curl_close or destructing $ch
curl_setopt($ch, CURLOPT_URL, 'http://another_url_that_uses_cookies');
$result = curl_exec($ch); // cookies from the previous request will be sent
cURL对使用Cookie中的会话ID将客户端与特定会话相关联的$_SESSION
全局不执行任何操作,因此您的代码示例设置$_SESSION['test']
然后使用cURL将无法正常工作预期
如果您想在cURL关闭后将cookie保存到文件中,然后在以后恢复它,您可以使用:
curl_setopt($ch, CURLOPT_COOKIEFILE, './cookies.txt'); // load cookies from here
curl_setopt($ch, CURLOPT_COOKIEJAR', './cookies.txt'); // save cookies here when curl closes
希望有所帮助。