Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用curl登录Joomla 2.5_Php_Curl_Joomla - Fatal编程技术网

Php 使用curl登录Joomla 2.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

我正在尝试用php中的curl远程访问Joomla2.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;
$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中没有散列。你告诉我了。明天我将尝试这个自动登录插件