Joomla 2.5使用curl登录

时间:2013-07-20 20:27:04

标签: php curl joomla

我正在尝试使用php中的curl远程访问joomla 2.5。后来我也想创建新的内容,但是现在我有登录的麻烦。对我来说是新的,所以我不知道我做错了什么。我收到此消息:“您的会话已过期。请再次登录。”到目前为止,这是我的代码:

$url = "http://localhost/joomla25/administrator/";
$cookie = "tmp/cookie".time().".txt";

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_URL, $url);
ob_start(); 
$page = curl_exec ($ch);
curl_close ($ch);
unset($ch);

//get hidden inputs
preg_match_all("(<input type=\"hidden\" name=\"return\" value=\"(.*)\" />)siU", $page,                     $matches1);
preg_match_all("(<input type=\"hidden\" name=\"(.*)\" value=\"1\" />)iU", $page,     $matches2);
$return = trim($matches1[1][0]);
$key = trim($matches2[1][0]);

$param = 'username='.urlencode("admin")."&passwd=".urlencode("admin")."&lang=&option=com_login&task=login&return=".urlencode($return)."&".urlencode($key)."=1";

$fp = fopen($cookie,"w");
fclose($fp);

//login
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_TIMEOUT, 40);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
ob_start();      
$page2 = curl_exec ($ch);
ob_end_clean();
curl_close ($ch);
unset($ch);

echo $page2;

知道出了什么问题吗?谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

管理员可能正在登录。它旨在防止滥用访问。如果你想从admn中提取,你需要添加一种处理身份验证的方法。有一个带有http auth插件的学生项目,你可以使用它。

您是否尝试进行基于Cookie的身份验证?

为什么不去前端?

答案 1 :(得分:0)

在站点根目录上创建cookie文件。将其命名为cookie.txt 我不在joomle上编码,但我认为有表格令牌。 Whitch表示,您无法在不获取令牌哈希的情况下提交表单。

当您登录manualy并且您已登录时,在url中就像哈希?