2013/07/02

利用 curl 來存取 appengine

這邊有一篇不錯的文章: Authenticating Google App Engine apps using curl

我以目前正在寫的 device-mgm 為例, 密碼假設是 Iamwade,其餘都沒改:

Step 1:
Getting auth key:
curl -f -s --output myAuthFile.txt -d Email=wade.fs@gmail.com -d Passwd=Iamwade -d accountType=GOOGLE -d service=ah -d source=device-mgm https://www.google.com/accounts/ClientLogin
PS1: 用 -d 或是用 --data-urlencode 都行,因為沒特殊字元, 若密碼有特殊字元,就要把 Passwd 那段改成 --data-urlencode Passwd=YOUR_PASSWORD
PS2: service 是 "ah", 這一點是我一直沒試出來的部份, 另外就是 source=device-mgm 是與 APP ID 一樣
PS3: 因為我一直都是用 gmail account, 所以 accountType 選 GOOGLE

Step 2:
Getting application cookie:
curl -c cookiefile "http://device-mgm.appspot.com/_ah/login?auth=`cat myAuthFile.txt | grep ^Auth= | cut -d= -f2`" > /dev/null
PS1: 若沒有導向 > /dev/null 會看到類似錯誤訊息,可以忽略
PS2: 會把 cookie 存到 cookiefile 中,這個檔跟原文作者貼的格式不一樣, 所以後面的命令要修

Step 3:
Calling our application service, getAllData:
curl -f -s -H "Cookie: ACSID=`awk '/./{line=$0} END{print line}' cookiefile | cut -f7`" http://device-mgm.appspot.com/help

PS1: 我是直接取最後一個非空白行,然後取第7欄,那就是 ACSID
PS2: 同一個應用(device-mgm)的不同服務,事實上也都可以適用,例如底下是 query:
curl -f -s -H "Cookie: ACSID=`awk '/./{line=$0} END{print line}' cookiefile | cut -f7`" http://device-mgm.appspot.com/query



0 意見: