You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash函数中校验curl返回状态码并返回接口响应JSON结果

实现方案

直接给出可用的完整函数实现:

# 全局配置(可放在脚本开头统一管理)
API_KEY="替换为你的实际接口密钥"
SERVICE_BASE="https://myservice.example.com"

function callServer() {
    local payload="$1"
    # 支持传入第二个参数自定义请求端点,默认使用根路径,可按需调整默认值
    local endpoint="${2:-/}"
    # 创建临时文件存储响应体,避免污染工作目录
    local resp_temp=$(mktemp)
    local http_code

    # 发起curl请求:响应体写入临时文件,HTTP状态码输出到标准输出用于校验
    http_code=$(curl --request POST \
        --url "${SERVICE_BASE}${endpoint}" \
        --header "Authorization: ${API_KEY}" \
        --header "Content-Type: application/json" \
        --data "${payload}" \
        -o "${resp_temp}" \
        -w "%{http_code}" \
        -s)

    # 状态码校验逻辑
    if [[ "${http_code}" != "200" ]]; then
        # 错误信息输出到标准错误方便排查
        echo "请求失败,HTTP状态码:${http_code},错误响应:$(cat "${resp_temp}")" >&2
        # 清理临时文件
        rm -f "${resp_temp}"
        # 直接终止整个脚本,返回错误码1
        exit 1
    fi

    # 状态码正常则输出响应体,供上层变量捕获
    cat "${resp_temp}"
    rm -f "${resp_temp}"
}

使用说明

注意:你原本的变量赋值写法不符合Bash语法,变量名左侧不能加$,函数输出需要用$()捕获,正确用法如下:

# 示例1:请求默认端点,把返回的JSON赋值给变量
getWidgetsJson=$(callServer '{"flim":"flam"}')

# 示例2:请求自定义端点 /launch
launchMissiles=$(callServer '{"fizz":"buzz","num":50}' '/launch')

关键改动说明

  • 把原本包裹变量的单引号改为双引号,确保$API_KEY、$payload会被Shell正确展开,不会发送字面量字符串
  • 通过curl的-w "%{http_code}"参数原生捕获返回的HTTP状态码,无需额外解析响应
  • 状态码非200时直接执行exit 1,会终止整个脚本运行,符合你的要求
  • 响应体输出到标准输出,可直接被变量捕获,无需额外读取本地文件

内容的提问来源于stack exchange,提问作者hotmeatballsoup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:36:04