PHP+;卷曲度+;乔姆拉
我正在尝试通过CURL从外部链接登录到Joomla 3。在从互联网上找到一些信息后,我通过一些修改获得了以下代码:PHP+;卷曲度+;乔姆拉,php,curl,joomla,Php,Curl,Joomla,我正在尝试通过CURL从外部链接登录到Joomla 3。在从互联网上找到一些信息后,我通过一些修改获得了以下代码: <?php $uname = "admin"; $upswd = "admin"; $url = "http://localhost/joomla3/en/component/users"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url ); curl_setopt($ch, CURLOPT_SSL_VERIF
<?php
$uname = "admin";
$upswd = "admin";
$url = "http://localhost/joomla3/en/component/users";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt');
curl_setopt($ch, CURLOPT_HEADER, FALSE );
$results = curl_exec($ch);
preg_match_all("(<input type=\"hidden\" name=\"return\" value=\"(.*)\" />)siU", $results, $matches1);
preg_match_all("(<input type=\"hidden\" name=\"(.*)\" value=\"1\" />(.*)</fieldset>)iU", $results, $matches2);
var_dump($matches1[1][0]);
var_dump($matches2[1][0]);
// POST fields
$postfields = array();
$postfields['lang'] = 'en';
$postfields['option'] = 'com_users';
$postfields['view'] = 'login';
$postfields['task'] = 'user.login';
$postfields['username'] = urlencode($uname);
$postfields['password'] = urlencode($upswd);
$postfields['return'] = urlencode($matches1[1][0]);
$postfields[urlencode($matches2[1][0])] = '1';
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
$ret = curl_exec($ch);
print_r($ret);
?>
我获取了return&key,但无法登录。怎么了?
谢谢。我修改了代码。
现在这项工作如期完成,谢谢大家的支持
<?php
$uname = "admin";
$upswd = "admin";
$url_get_key = "http://localhost/joomla3/index.php?option=com_users&lang=en"; //MOD REWRITE Disabled
//GET return & key
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_get_key );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt');
curl_setopt($ch, CURLOPT_HEADER, 0 );
$results = curl_exec($ch);
preg_match_all("(<input type=\"hidden\" name=\"return\" value=\"(.*)\" />)siU", $results, $matches1);
preg_match_all("(<input type=\"hidden\" name=\"(.*)\" value=\"1\" />(.*)</fieldset>)iU", $results, $matches2);
//var_dump($matches1[1][0]);
//var_dump($matches2[1][0]);
// POST
$url_post = "http://localhost/joomla3/index.php?option=com_users&task=user.login&lang=en";
$postdata = "username=".urlencode($uname)."&password=".urlencode($upswd)."&return=".urlencode($matches1[1][0])."&".urlencode($matches2[1][0])."=1";
curl_setopt($ch, CURLOPT_URL, $url_post);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
$results1 = curl_exec($ch);
$url_data = "http://localhost/joomla3/index.php?option=com_users&lang=en"; //MOD REWRITE Disabled
curl_setopt($ch, CURLOPT_URL, $url_data);
$results2 = curl_exec($ch);
$error = curl_error($ch);
$errno = curl_errno($ch);
echo ($error);
curl_close($ch);
//IF incorrect password
if(@preg_match('#<div id="system-message">(.*)<p>(.*)</p>#siU', $results2, $matches3)){
@preg_match('#<p>(.*)</p>#i', $matches3[0], $matches4);
echo $matches4[0];
}
//IF Logged In
if(@preg_match('#<div class="login-greeting">(.*)</div>#siU', $results2, $matches5)){
echo $matches5[1];
}
?>
您获得的输出是什么?打印($ret);不返回任何内容(空字符串)。curl调试的基础知识:curl\u error()
:dirname(\uuuuu FILE\uuuu)。“./cookie.txt”
指的是不存在的文件(某些路径。/cookie.txt
)。您必须将其更改为dirname(\uuuu文件)。“/cookie.txt”
Ah,这是我的错误,我已经更改了,但结果是一样的。