我正在尝试将在其他位置经过身份验证的用户登录到Joomla网站,并且正在关注Brent Friar's不错的程序,但必须应用两个修改:
我不知道该网站是否有特定的自定义,使用特定的登录模块,或者是否是不同的版本 - 我没有该网站的管理员访问权限,所以我无法检查。 现在,我的脚本正在运行,但是它没有成功登录用户 - 它没有获得它所期望的cookie。
相反,网站返回
HTTP / 1.1 100继续
HTTP / 1.1 303见其他日期:星期三,23七月2014 18:18:25 GMT服务器: Apache / 2.2.22 X-Powered-By:PHP / 5.2.17位置: http://www.strassenbau.forum-kundenportal.de/login-erfolgreich Content-Length:0连接:close Content-Type:text / html; 字符集= UTF-8
我对Joomla有点了解,但对它的http通信深度一无所知,所以我不知道这里有什么问题。
这是我的代码:
<?php
$uname = "*** secret";
$upswd = "*** credentials";
$url = "http://www.strassenbau.forum-kundenportal.de/login-anmeldung";
set_time_limit(0);
$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_COOKIESESSION, TRUE );
curl_setopt($ch, CURLOPT_COOKIEJAR, realpath('./cookie.txt'));
curl_setopt($ch, CURLOPT_COOKIEFILE, realpath('./cookie.txt'));
curl_setopt($ch, CURLOPT_HEADER, TRUE );
$ret = curl_exec($ch);
if (!preg_match('/name="([a-zA-z0-9]{32})"/', $ret, $spoof)) {
preg_match("/name='([a-zA-z0-9]{32})'/", $ret, $spoof);
}
preg_match('/name="return" value="(.*)"/', $ret, $return); // search for hidden field "return" and get its value
// POST fields
$postfields = array();
$postfields['username'] = urlencode($uname);
$postfields['password'] = urlencode($upswd);
$postfields['option'] = 'com_users';
$postfields['task'] = 'user.login';
$postfields['return'] = $return[1];
$postfields[$spoof[1]] = '1';
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
$ret = curl_exec($ch);
echo "ret2: <pre>"; var_dump($ret); echo "</pre>"; // no cooking being set here!
// Get logged in cookie and pass it to the browser
preg_match('/^Set-Cookie: (.*?);/m', $ret, $m);
$cookie=explode('=',$m[1]);
setcookie($cookie[0], $cookie[1]);
?>
答案 0 :(得分:0)
我最终使用了完成这项工作的AutoLogin-extension。不像&#34;优雅&#34;正如我想要的那样(因为它需要安装该插件),但是嘿,它有效! : - )