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/bash

loginStr='curl -c cookies -d "username=YWRtaW4%3D&password=YWRtaW4xMjM%3D"  https://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}' https://10.25.81.60:8081/service/extdirect"

eval $loginStr

eval $freezeStr

相关内容

    暂无相关文章