2014年10月2日 星期四

Linux 使用 curl (wget) 自動訪問網頁

bash sell script 範例如下。每隔15秒,使用 curl 登入網頁,並儲存 cookie
#!/bin/bash
while :
do
   MyDir="/home/data"
   #日期當作 log 檔名
   MyLog=${MyDir}/log/`date +%Y-%m-%d`.txt

   #判斷 log 檔是否存在
   if [ ! -f $MyLog ]
   then
      touch $MyLog
   fi

   echo "#start:"`date` >> ${MyLog}

   #登入,-c 參數儲存使用到的 cookie, --data 參數設定 post 的資料
   curl -c ${MyDir}/cookie/cookie.txt --data "username=abc&password=123456" http://127.0.0.1/login >> ${MyLog}
   #訪問下一頁, -b 使用之前儲存的 cookie,
   curl -b ${MyDir}/cookie/cookie.txt -c ${MyDir}/cookie/cookie.txt http://127.0.0.1/home >> ${MyLog}

   echo "#end:"`date` >> ${MyLog}
   
   #暫停15秒
   sleep 15
done
注意:bash sell script 換行要用 linux <lf> 的換行,若用 windows <cr><lf> 換行,會出現「syntax error near unexpected token `done'」錯誤。
http://stackoverflow.com/questions/18367708/bash-syntax-error-near-unexpected-token-done

若使用 wget 則將上面的 curl 那兩行改為如下(要使用 --keep-session-cookies 才會儲存 session cookie)
wget --keep-session-cookies --save-cookies ${MyDir}/cookie/cookie.txt --post-data "username=abc&password=123456" http://127.0.0.1/login
wget --keep-session-cookies --load-cookies ${MyDir}/cookie/cookie.txt http://127.0.0.1/home


curl 參數:
-c 檔案路徑 : 將 cookie 儲存到指定的檔案路徑
-b 檔案路徑(或"name1=value1; name2=value2"格式的資料) : 使用之前儲存的cookie檔案或依指定格式寫的cookie資料
--data "name1=value1&name2=value2"格式的資料: 傳送 post 的資料
-s : silent,不顯示進度或錯誤訊息
-S : 搭配"-s",當失敗時,將會顯示錯誤訊息
-G : 傳送 GET 的資料 (-d, --data, --data-binary 的資料用"?"附加在網址後面)


參考:
Send cookies with curl
How to enter login information for a website from the linux command line
wget a file, logging the output and showing the output on prompt
Evelyn's Note: curl 指令用法
bash - Hide curl output - Unix & Linux Stack Exchange

沒有留言:

張貼留言