2012-04-04 64 views
0

一種「新手問題」,以部分確認/糾正我的理解: 我想實施一些自動網站探測包括。登錄,我不想實際拉取任何數據。從早期的工作中,我記得curl和僅檢查URL可用性(eval HTTP響應代碼,例如200或不),這很好地工作。 現在任務也在登錄 - 但我無法讓它工作,並且懷疑這是否按預期工作。經過一段時間的實驗和搜索WWW後,我找不到明確的答案 - 所以我的希望在這裏:-)網絡會話捲曲探測

最初我的想法是使用腳本,只是在裏面放入curl POST命令,以防萬一與餅乾選項,如:

$ curl -s -w "%{http_code}" -o /tmp/tge-HTML.out -b /tmp/tge-cookies -c /tmp/tge-cookies -F "username=bla&passwd=blub&Submit=Login" http://some.url 

(我用的是HttpFox確定POST參數和我大多肯定有他們的權利)

然後,我整個文件中搜索/tmp/tge-HTML.out是否包含「註銷」作爲我已登錄的證明(即使未登錄,我總是在所有測試中獲得HTTP 200,並且包含各種URL裏德)。我發現,在Firefox中登錄後,後續的URL包含... & jsessionid = ...當然,我最初不知道 - 所以我嘗試了幾件事,例如(!命令)來調用捲曲兩次在shell腳本,從第一個得到的SessionID,並將其附加到第二網址,如:

$ curl -s -w "%{http_code}" -o /tmp/tge-HTML.out -b /tmp/tge-cookies -c /tmp/tge-cookies -F "username=bla&passwd=blub&Submit=Login" http://some.url 
... extract jsessionid from /tmp/tge-HTML.out ... 
$ curl -s -w "%{http_code}" -o /tmp/tge-HTML.out -b /tmp/tge-cookies -c /tmp/tge-cookies 
    http://some.url/...?jsessionid=... 

但無論我嘗試,我從來沒有在任何地方: - | 現在的問題:

  1. 如果我做一個基於捲曲-POST,如上面的例子,做我 (通常?)獲得完整的HTML頁面的響應,就像我看到它 在常規的網絡瀏覽器登錄後?

    • 看起來我好像真的,但隨後一個簡單的POST應該做的,它應該包含「註銷」 ...
    • 但是,因爲我從來沒有得到這個工作,可能是什麼問題?
  2. 如果我必須做多個HTTP請求,請問 那個使用curl命令的概念就像那樣工作嗎?什麼 捲曲退出時發生?套接字關閉,Web服務器 可能會關閉會話(並且我的jsessionid無效)?

    • 如果這種方法不起作用,基於libcurl的概念可能會更好?例如。 phpcurl(只讀過它,但從來沒有嘗試過),我的會議保持在我的PHP腳本,因此連接/會話保持打開等...
    • 可能取決於該網站是否使用cookie?
  3. 有沒有更好的想法如何完成 最初的想法?理想情況下,應該簡單一些腳本,但 沒有龐大的監控套房

最有可能有許多「取決於......」: - |此外,可能的問題不是100%準確,但任何提示都表示讚賞! :-)

RGDS, TGE

回答

0

OK,最後我取得了一些進步 - 也許它可以幫助其他人... 首先,基於腳本的方法做工作,測試用例一個至少與Joomla在服務器端(我會稍後嘗試其他人)。密鑰到該溶液中是這樣的: CURL login by script to a Joomla website

類似於所描述的方式予提取從第一GET的響應令牌並把它放入第二形式參數:

rm -f /tmp/tge-cookies 
HTTP_CODE=$(./curl -s -w "%{http_code}\\n" -o /tmp/tge-HTML-out.1 -b /tmp/tge-cookies -c /tmp/tge-cookies -L ${URL}) 
# Eval HTTP_CODE ... 
Token=`awk '{ if(match($1, "<input") && match($3, "name=\"[a-z0-9]+\"")) 
    { 
    gsub("name=\"", "", $3); 
    gsub("\"", "", $3); 
    if(length($3) == 33) 
    { 
     print $3; 
     exit 0; 
    } 
    } }' /tmp/tge-HTML-out.1` 
HTTP_CODE=$(./curl -L -s -w "%{http_code}\\n" -o /tmp/tge-HTML-out.2 -b /tmp/tge-cookies -c /tmp/tge-cookies -d "username=${User}&passwd=${Pass}&option=login&task=login&${Token}=1&remember=yes&Submit=Login" ${URL}) 
# Eval HTTP_CODE ... 
# Eval /tmp/tge-HTML-out.2 whether containing "Logout" ... 

第二差是使用「-F」不起作用,但「-d」。 非常有趣的是,POST參數與我在HTTPfox中看到的不同。

Registers tge