![无法使用curl保存会话ID](https://linux22.com/image/151200/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8curl%E4%BF%9D%E5%AD%98%E4%BC%9A%E8%AF%9DID.png)
随着请求:
curl -i -u pvserver:XXXXXXX 'http://192.168.2.42/api/login.json'
我有这个输出
{"salt":"uTxYWQDc9lWwsuHBRfkuTzJYG5M=","session":{"sessionId":2748768190,"roleId":0},"status":{"code":0}}
现在我想向服务器发送以下请求:
curl -X POST \
'http://192.168.2.42/api/dxs.json?' \
-H 'accept: application/json, text/plain, */*' \
-H 'accept-encoding: gzip, deflate' \
-H 'accept-language: en-US,en;q=0.9' \
-H 'authorization: Basic cHZzZXJ2ZXI6VjZUNUJYSDI=' \
-H 'cache-control: no-cache' \
-H 'content-type: text/plain' \
-H 'cookie: language=en_GB' \
-H 'origin: http://192.168.2.42' \
-H 'referer: http://192.168.2.42/' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/71.0.3578.98 Chrome/71.0.3578.98 Safari/537.36' \
-b language=en_GB \
-d '{"dxsEntries":[{"dxsId":33556247,"value":95}]}'
仅当我包含收到的会话 ID 时,该方法才有效,但我无法复制和粘贴 ID,因为这是一个自动化过程,是脚本的一部分,每 6 秒运行一次并从另一台服务器获取数据“值”值。
我已经尝试过curl -c 和-b 选项,但在我看来它们不起作用,因为使用浏览器开发工具显示,会话ID 确实以cookie 的形式出现。
答案1
我已经解决了这个问题。第一个 POST 上的身份验证作为数据发送。这两个curl请求是:
curl -X POST \
'http://192.168.2.42/api/login.json?sessionId=xxxxxxxxxx' \
-H 'accept: application/json, text/plain, */*' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-H 'origin: http://192.168.2.42' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.75 Chrome/73.0.3683.75 Safari/537.36' \
-d '{"mode":2,"userId":"xxxxxxx_x","pwh":"xxxxxxxxxxxxxxxxxxxxxxxxxx="}'
和
curl -X POST \
'http://192.168.2.42/api/dxs.json?sessionId=xxxxxxxxx' \
-H 'accept: application/json, text/plain, */*' \
-H 'cache-control: no-cache' \
-H 'content-type: application/json;charset=UTF-8' \
-H 'origin: http://192.168.2.42' \
-H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.75 Chrome/73.0.3683.75 Safari/537.36' \
-d '{"dxsEntries":[{"dxsId":33556252,"value":3},{"dxsId":33556249,"value":50},{"dxsId":83888896,"value":1},{"dxsId":83888640,"value":true},{"dxsId":33556484,"value":false},{"dxsId":33556239,"value":0},{"dxsId":33556240,"value":82800},{"dxsId":33556247,"value":95}]}'
两者都是通过使用浏览器开发工具复制为 Curl,同时单击 UI 相关页面来获得的。保留由此获得的任何 sessionId、userId 和 pwh 值可确保命令继续工作。两个帖子上的 sessionId 必须相同。事实证明,在第二篇文章中,我必须发送所有字符串值,而不仅仅是必须更新的字符串值。
答案2
保持会话状态的基本方法是使用 cookie:
curl -d '...' -b ~/.cache/mycurl.cookiejar -c ~/.cache/mycurl.cookiejar ...
然后你可以剪掉一些不再需要的标题