2

我正在尝试在 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;

知道有什么问题吗?感谢帮助!

4

2 回答 2

0

在站点根目录上创建 cookie 文件。将其命名为 cookie.txt 我不在 joomle 上编码,但我认为有表单令牌。Whitch 的意思是,你不能在没有获得令牌哈希的情况下提交表单。

当您手动登录并登录时,网址中的内容类似于哈希?

于 2013-07-20T20:35:18.027 回答
0

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

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

为什么不去前端?

于 2013-07-20T20:31:08.670 回答