从curl中提取其可怕的失败消息(如果返回代码!= 0)、状态代码、输出和错误消息到四个不同的变量中

从curl中提取其可怕的失败消息(如果返回代码!= 0)、状态代码、输出和错误消息到四个不同的变量中

我需要从curl发出的中提取:

  • bash 错误消息带有非零?$返回代码,以防我的命令严重失败
  • 所联系的服务器返回的http状态码
  • 伴随非 20x 状态代码的错误消息
  • 命令的输出消息

并将所有四个分派到四个不同的变量中。

这是我可以做的,通过以下请求创建一个工作区(如果它不存在):

URL=$1
USER=$2
PASSWORD=$3

WORKSPACE=ecoemploi

# Créer un workspace ecoemploi (workspace par défaut)
CREATE_WORKSPACE_JSON=$(cat <<EOF
{
   "workspace":
   {
     "name": "$WORKSPACE"
   }
}
EOF
)

CREATE_WORKSPACE_RESPONSE=$(curl --silent -X POST --write-out "%{http_code}" \
   -H 'Content-type: text/json' -u "$USER:$PASSWORD" \
   "$URL/workspaces" -d "$CREATE_WORKSPACE_JSON")

if [ $? -ne 0 ]; then
   echo "La création de workspace dans geoserver a échoué avec le code $? : $CREATE_WORKSPACE_RESPONSE"
   exit $?
fi

echo "$CREATE_WORKSPACE_RESPONSE"

curl --silent -X POST --write-out '%{http_code}' -H 'Content-type: text/json' -u admin:geoserver http://localhost:8080/geoserver/rest/workspaces -d '{"workspace": {"name": "ecoemploi"}}'例如,发送 a 。


我需要在变量之间进行分派,因为我正在联系的服务器具有以下行为:

  1. 如果一切正常,并且工作区不存在,echo "$CREATE_WORKSPACE_RESPONSE"则显示:
    ecoemploi201

  2. 如果目标工作区已存在,echo则显示:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 409 Workspace &apos;ecoemploi&apos; already exists</title>
</head>
<body><h2>HTTP ERROR 409 Workspace &apos;ecoemploi&apos; already exists</h2>
<table>
<tr><th>URI:</th><td>/geoserver/rest/workspaces</td></tr>
<tr><th>STATUS:</th><td>409</td></tr>
<tr><th>MESSAGE:</th><td>Workspace &apos;ecoemploi&apos; already exists</td></tr>
<tr><th>SERVLET:</th><td>dispatcher</td></tr>
</table>
<hr/><a href="https://eclipse.org/jetty">Powered by Jetty:// 9.4.48.v20220622</a><hr/>

</body>
</html>
409

如果我--output /dev/null在命令中添加 a ,它将返回:

  1. 201
  2. 409

但那么我就失去了对这两种情况的解释。

  1. 状态201代码带有在 stdout 中创建的工作区的名称
  2. 失败消息409带有一个看起来是标准输出的输出,我想知道标准错误中是什么

我如何编写一条语句来填充下一个粗体变量?

创建工作空间错误=$(curl --silent -X POST --write-outHTTP_STATUS_CODE
-H '内容类型:text/json' -u "$USER:$PASSWORD"
"$URL/workspaces" -d "$CREATE_WORKSPACE_JSON") 1>CREATE_WORKSPACE_STDOUT2>CREATE_WORKSPACE_STDERR

为了检查和撰写我愿意发送的最终用户消息,并生成$CREATE_WORKSPACE_ERROR, $HTTP_STATUS_CODE, $CREATE_WORKSPACE_STDOUT,$CREATE_WORKSPACE_STDERR变量?

相关内容