要求通り:
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を含む場合にのみ機能しますが、これは自動化されたプロセスであり、6秒ごとに実行され、他のサーバーからデータを取得するスクリプトの一部であるため、IDをコピーして貼り付けることはできません。 「値」値。
私はCal -cと-bオプションを試しましたが、ブラウザ開発ツールを使用すると、セッションIDがCookie形式で提供されることを示しているため、機能しないようです。
答え1
この問題を解決しました。最初のPOSTの認証はデータとして送信されます。 2つのカールリクエストは次のとおりです。
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}]}'
どちらもUI関連ページをクリックしながら、ブラウザ開発ツールを使用してCurlにコピーすることで取得できます。ここで取得した sessionId、userId、pwh の値を保存しても、コマンドは動作し続けます。 sessionIdは両方の投稿で同じでなければなりません。 2番目の投稿では、更新する必要がある文字列値だけでなく、すべての文字列値を送信する必要があることがわかりました。
答え2
セッション状態を維持する基本的な方法は、Cookieを使用することです。
curl -d '...' -b ~/.cache/mycurl.cookiejar -c ~/.cache/mycurl.cookiejar ...
その後、不要になったいくつかのヘッダーを切り取ることができます。