最近在玩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