脚本示例如下:
#!/bin/bash
url="http://127.0.0.1/curl/test"
curl_output=$(curl --connect-timeout 30 --max-time 120 --silent --show-error "$url" 2>curl_error.log)
curl_res=$?
errorMsg=$(cat curl_error.log)
if [[ ${curl_res} -ne 0 ]]; then
echo "curl error: ${curl_res}, errorMsg: ${errorMsg}"
exit ${curl_res} # 如果 curl 命令失败,则退出脚本
else
# 使用 jq 检查curl_output 是否是一个有效的 JSON 字符串(可选)
echo $curl_output | jq -e '.' >/dev/null 2>&1
if [[ $? -ne 0 ]]; then
echo "Error: Invalid JSON response from server."
exit 1
fi
# 使用 jq 解析 JSON 并获取 status 字段
status=$(echo "$curl_output" | jq -r '.status')
if [[ "$status" != "200" ]]; then
echo "Error: Server returned status ${status}. Response: ${curl_output}"
exit 1 # 如果状态码不是 200,则退出脚本
else
# 如果状态码是 200,这里可以处理其他逻辑
echo "Success: Server returned status 200."
# ... 其他处理逻辑 ...
fi
fi
# 脚本结束,如果之前没有退出,则默认返回 0
exit 0
脚本说明:
curl --connect-timeout 30 --max-time 120 --silent --show-error $url 2>curl_error.log
-
--connect-timeout 30
:设置尝试连接到服务器时的最大时间(秒)。如果在这个时间段内没有成功建立连接,curl
将放弃并返回一个错误。在这个例子中,连接超时设置为 30 秒。 -
--max-time 120
:设置整个操作(包括连接、传输和等待服务器响应)的最大时间(秒)。如果在这个时间段内操作没有完成,curl
将放弃并返回一个错误。在这个例子中,最大总时间设置为 120 秒(即 2 分钟)。 -
--silent
或-s
:禁止curl
显示进度信息或错误消息。但是,--show-error
选项会覆盖--silent
的错误消息禁止行为,因此错误消息仍然会显示。 -
--show-error
:即使使用了--silent
或-s
选项,也显示错误消息。这个选项确保即使curl
在静默模式下运行,错误消息也会显示出来。 -
2>curl_error.log
将错误信息输出到curl_error.log
所以, curl --connect-timeout 30 --max-time 120 --silent --show-error $url 2>curl_error.log
将会:
- 尝试在 30 秒内连接到
$url
。 - 允许整个操作(包括连接、传输和等待服务器响应)最多持续 120 秒。
- 在执行过程中不显示进度信息。
- 如果有任何错误发生,仍然会显示错误消息。
curl_output=$(curl --connect-timeout 30 --max-time 120 --silent --show-error $url 2>curl_error.log)
curl_output
获取curl
命令的标准输出,即服务器返回的request body的内容。
curl_res=$?
errorMsg=`cat curl_error.log`
curl_res
::获取curl
命令的返回值,0代表执行成功,非0值代表执行失败,如拒绝连接返回7errorMsg
:从文件curl_error.log中读取错误信息