Php 使用curl登录Joomla 2.5
我正在尝试用php中的curl远程访问Joomla2.5。后来我也想创建新内容,但现在我在登录方面遇到了麻烦。对我来说是新的,所以我不知道我做错了什么。我收到消息:“您的会话已过期。请重新登录。”。以下是我目前的代码:Php 使用curl登录Joomla 2.5,php,curl,joomla,Php,Curl,Joomla,我正在尝试用php中的curl远程访问Joomla2.5。后来我也想创建新内容,但现在我在登录方面遇到了麻烦。对我来说是新的,所以我不知道我做错了什么。我收到消息:“您的会话已过期。请重新登录。”。以下是我目前的代码: $url = "http://localhost/joomla25/administrator/"; $cookie = "tmp/cookie".time().".txt"; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURN
$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;
$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(兼容;MSIE 5.01;Windows NT 5.0)”);
curl_setopt($ch,CURLOPT_URL,$URL);
ob_start();
$page=curl\u exec($ch);
卷曲关闭($ch);
未结算($ch);
//获取隐藏的输入
preg_match_all(“()siU”,$page,$matches1);
preg_match_all(“()iU”,$page,$matches2);
$return=trim($matches1[1][0]);
$key=trim($matches2[1][0]);
$param='username='.urlencode(“admin”)。&passwd=“.urlencode(“admin”)。&lang=&option=com\u login&task=login&return=“.urlencode($return)。”&.urlencode($key)。“=1”;
$fp=fopen($cookie,“w”);
fclose($fp);
//登录
$ch=curl_init();
curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie);
curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie);
curl_setopt($ch,CURLOPT_USERAGENT,“Mozilla/4.0(兼容;MSIE 5.01;Windows NT 5.0)”);
curl_setopt($ch,CURLOPT_超时,40);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($ch,CURLOPT_URL,$URL);
curl_setopt($ch,CURLOPT_头,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=旋度执行($ch);
ob_end_clean();
卷曲关闭($ch);
未结算($ch);
echo$page2;
你知道怎么了吗?谢谢你的帮助 管理员可能正在登录。它的设计是为了防止非法访问。如果要从admn中提取,则需要添加一种处理身份验证的方法。有一个学生项目,其中有一个http认证插件,您或许可以使用它 您正在尝试执行基于cookie的身份验证吗
为什么不转到前端?在站点根目录上创建cookie文件。将其命名为cookie.txt 我不在joomle上编码,但我认为有表单标记。这意味着,如果不获得令牌哈希,就不能提交表单
当您手动登录并登录时,in url类似于哈希?我从两个隐藏表单中获取值,因此我猜这就是您所说的令牌。手动登录后,url中没有散列。你告诉我了。明天我将尝试这个自动登录插件