如何通过 curl 等待响应代码 201

How to wait for response code 201 via curl

我有一个使用 K15t Scroll Version 插件发布 Atlassian Confluence space 的 curl 命令:

curl -v -H "Accept:application/json" -H "Content-Type:application/json" -X POST "http://<server>/rest/scroll-versions/1.0/publish/<spacekey>/to_new/publish?os_username=myusername&os_password=mypassword" --data {"versionId":"9C8CC11601610D3E794E334A746E61SD","targetSpaceKey":"pro60", "targetSpaceName":"Pro 60", "treeProviderName":"Pro 2017", "languageKey":"all", "copyLabels":"false", "keepAuthorsAndDates":"false", "removeAttachments":"false", "sendEmail":"false", "keepPermalinks":"false", "onlyPagesInFinalState":"false", "onlyPagesInFinalStateProcessChildren":"false", "publishHierarchy":"false"}

此命令 returns 响应代码 202,其中包含正在发生的事情的摘要。然后,我需要继续检查下面的 URL 以了解 activity 何时完成。我一直收到代码 202,最后收到代码 201。然后,我保存了我在下面调用 URL 的响应。

http://<server>/rest/scroll-versions/1.0/async-tasks/<alphanumeric id generated when 202 is returned> 

执行 curl 然后调用上面的 URL 后生成响应后,我应该如何将响应保存到日志文件?

wait-for-code.sh (based on https://superuser.com/a/442395/634271)

#/bin/sh

HOST=
ATTEMPTS=${2:-10} # -1 for unlimited
CODE=${3:-200}
OUT=${4:-/dev/null}
DELAY=${5:-1s}

if [[ "$OUT" = "/dev/null" ]]; then
    GET_BODY="I"
else
    GET_BODY=""
fi

CURL="curl -${GET_BODY}so ${OUT} -w %{http_code} ${HOST}"

until [ $ATTEMPTS -eq 0 ]; do
    [ `$CURL` -eq $CODE ] && exit 0
    [ $ATTEMPTS -gt 0 ] && [ $((--ATTEMPTS)) ]
    [ $ATTEMPTS -gt 0 ] && sleep $DELAY
done

exit 1

您的情况下的用法:

$ SERVER="http://<server>/rest/scroll-versions/1.0/async-tasks/<alphanumeric id generated when 202 is returned>"
$ ./wait-for-http-code.sh $SERVER -1 201 out.log