Llinux使用curl類比登陸並調用介面,llinuxcurl
最近在玩nexus3倉庫。需要對nexus倉庫進行定時自動備份。由於nexus3倉庫在備份的過程中是不可以進行寫操作的,所以在執行備份的時候將nexus3設定為唯讀模式。通過 "F12"抓包到相關介面以及參數之後,通過curl調用介面將neuxs3倉庫設定為唯讀模式。
在第一次調用設定唯讀模式的介面後,返回如下結果,調用失敗,需要進行使用者認證才能調用,不然什麼阿貓阿狗都能調用你的介面豈不是亂套了。
{ "tid": 30, "action": "coreui_DatabaseFreeze", "method": "update", "result": { "message": "User is not permitted: nexus:*", "authenticationRequired": false, "success": false, "data": [] }, "type": "rpc"}既然如此,那就先類比登陸吧。在網上搜尋了下,curl在linux上的登陸命令為:
curl -d "username=YWRtaW4%3D&password=YWRtaW4xMjM%3D" "https://10.25.81.60:8081/service/rapture/session"
執行之後,在執行下面的命令以post調用介面調用介面
curl -i -X POST -H "'Content-type':'application/json'" -d '{"action": "coreui_DatabaseFreeze","method": "update","data": [{"frozen": false}],"type": "rpc","tid": 30}' https://10.25.81.60:8081/service/extdirect結果發現沒有生效,於是我在本地用postman發送對應的登陸以及調用介面的http請求,發現可以成功的啟動nexus3的唯讀模式。
最後想了下,postman會自己儲存cookie等東西,而我在linux中並不會自動儲存cookie,我執行的那兩條curl命令實際上是沒有聯絡的。
如果要成功登陸,必須通過curl命令將登入到的cookie儲存下載,然後調用介面的時候將cookie帶上去。修改之後的指令碼如下:
#!/bin/bashloginStr='curl -c cookies -d "username=YWRtaW4%3D&password=YWRtaW4xMjM%3D" https://10.25.81.60:8081/service/rapture/sessionfreezeStr="curl -i -X POST -b cookies -H "'Content-type':'application/json'" -d '{"action": "coreui_DatabaseFreeze","method": "update","data": [{"frozen": false}],"type": "rpc","tid": 30}' https://10.25.81.60:8081/service/extdirect"eval $loginStreval $freezeStr