2009年6月19日

自動化通過https認證,登入到後端網頁並查詢資料

有時候會遇到這種情形,MIS提供網頁給你查詢,但是要通過前端的認證,這個情境對於人類來使用的話,是不會有問題,但如果要叫程式利用這個網頁來查詢用戶狀態,就變成不可行

此時就可利用linux下的 cURL 工具,此工具可當做文字模式的瀏覽器,可以分割抓檔、傳遞網頁參數獲得回傳結果,支援https等,瀏覽器做得到的,他都作得到~

由於前端認證網頁 (https://auth.xxx.com.tw/login.php) 是利用 POST 方法來做網頁間參數的傳遞:
cURL要做POST傳遞需加 -d 參數,此例會傳送id與pwd兩個參數,中間用&連接
curl -d "id=taiwanwolf&pwd=1234" https://auth.xxx.com.tw/login.php

至於我怎麼知道網頁是用什麼參數在傳遞的呢?
由於我是用 Firefox 瀏覽器,所以有很多好用的 Extension 可以來做,可參考這個 Live HTTP Headers 0.14,安裝完後工具列就會出現 Live HTTP Headers 選項,點選後就會出現監視的視窗,之後你在網路上任何存取的動作,有用到的連結都會出現在此視窗中~

認證通過後,就可以做後續查詢的動作,但這只有一次性,也就是這個session存在的期間才有效,所以我們必須用 cookie 把現在的狀態存起來:
儲存 cookie 要利用 -D 參數,再加上先前的POST傳遞登入資訊,合而為一
curl -d "id=taiwanwolf&pwd=1234" -D auth.txt https://auth.xxx.com.tw/login.php

最後就可以利用已經登入存檔的cookie,來進行後端網頁的查詢囉,讀入cookie要利用-b參數
curl -d "NUM=0912345678&DATE=20090618" -b auth.txt http://eip.xxx.com.tw/code/queryMobile.jsp

這樣再把儲存 cookie 的部份用 crontab 固定每幾個小時跑一次,保持 session 的連接,這樣就可以自動通過認證去後端做事情囉~

沒有留言: