1. 程式人生 > >Llinux上用curl模擬登陸並呼叫介面

Llinux上用curl模擬登陸並呼叫介面

最近在玩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" "http://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}' http://10.25.81.60:8081/service/extdirect
結果發現沒有生效,於是我在本地用postman傳送對應的登陸以及呼叫介面的http請求,發現可以成功的啟動nexus3的只讀模式。

  最後想了下,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