2014-01-29 143 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 –