2014-01-29 146 views
0

我想做一个脚本,将登录在Joomla!网站和简单的页面刷新后将返回我需要的值。Joomla从外部脚本自动登录

我想的一样简单的东西:

wget --useragent="" --load-cookies="" --save-cookies="" --keep-session-cookies --post-data="?option=com_user&username=testuser&passwd=testpassword&Submit=Login&option=com_user&task=login&return=token=1" --quiet -O file http://site/index.php 

但它返回

"You should enable JavaScript to login or register"

所以我在想,如果这样的事情是可能的吗?我试过在Mechanize上使用Perl,但问题是存在JavaScript授权。

+0

您可能需要使用浏览器的自动化解决方案,如硒或Watir/Watin。这些肯定会奏效。 – HerrimanCoder

回答

0

如果有人仍然需要这一点,下面你可以找到完整的解决方案:

function login { 
    Server=$1 
    User=$2 
    Pass=$3 
    Token=`wget \ 
     --quiet \ 
     --load-cookies ~/cookies.${User}.txt \ 
     --save-cookies ~/cookies.${User}.txt \ 
     --keep-session-cookies \ 
     --output-document=- \ 
     "http://${Server}/site/log-in.html" | grep hidden | grep name | grep value | tail -n 2 | grep -v username | awk {'print $3'} | cut -d= -f 2 | sed "s/\"//g" 
# grep -Po '"[a-zA-z0-9]{32}"' | \ 
# grep -o "[^'\"]*"` 

    wget \ 
     --quiet \ 
     --load-cookies ~/cookies.${User}.txt \ 
     --save-cookies ~/cookies.${User}.txt \ 
     --keep-session-cookies \ 
     --output-document=/dev/null \ 
     --post-data="username=${User}&passwd=${Pass}&option=com_login&task=login&${Token}=1" \ 
     "http://${Server}/site/index.php?option=com_login" 

    wget \ 
     --quiet \ 
     --load-cookies ~/cookies.${User}.txt \ 
     --save-cookies ~/cookies.${User}.txt \ 
     --keep-session-cookies \ 
     --output-document=- \ 
     "http://${Server}/interface/modules/summary/index.php" 
} 

使用功能上面需要的creds

login site.com username password 
0

为什么这不起作用是因为Joomla使用隐藏的令牌输入来检查请求是否来自之前生成的页面。令牌每次都会更改并与会话耦合。看到这里的信息:http://api.joomla.org/cms-2.5/classes/JSession.html#method_checkToken

的com_user组件将检查令牌,所以如果你想这样做,使用wget,你必须先申请一个登录形式(例如/index.php?option=com_user&view=login),然后刮它来查找单词和提交它与实际的登录请求。

请注意,令牌看起来像<input type="hidden" name="<hex-coded-value>" value="1" />,即输入的名称是实际的令牌值,正如您所期望的那样。

+0

你的意思是说,在接下来的wget请求中,我需要从这个请求中放入一个令牌/index.php?option=com_user&view=login? – user2982789

+0

是的,您会在第二个请求的--post-data部分中发布该令牌以及用户名和密码。所以就像?option = com_user&password = ...& = 1 –