컬을 사용하여 세션 ID를 저장할 수 없습니다

컬을 사용하여 세션 ID를 저장할 수 없습니다

요청대로:

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를 복사하여 붙여넣을 수 없습니다. "값" 값.

나는 컬 -c 및 -b 옵션을 시도했지만 브라우저 개발 도구를 사용하면 세션 ID가 쿠키 형식으로 제공된다는 것을 보여주기 때문에 작동하지 않는 것 같습니다.

답변1

이 문제를 해결했습니다. 첫 번째 POST의 인증은 데이터로 전송됩니다. 두 가지 컬 요청은 다음과 같습니다.

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

세션 상태를 유지하는 기본 방법은 쿠키를 사용하는 것입니다.

curl -d '...' -b ~/.cache/mycurl.cookiejar -c ~/.cache/mycurl.cookiejar ...

그런 다음 더 이상 필요하지 않은 일부 헤더를 잘라낼 수 있습니다.

관련 정보