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