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

如何从cURL 8.0中获取HTTP状态码错误信息?

解决cURL检测HTTP非成功状态码的问题

首先明确:你遇到的情况不是cURL的HTTP/2 Bug。cURL的$?退出码仅表示「请求是否完成传输」——只要服务器返回了响应(哪怕是405这类错误状态),传输过程没出错,cURL就会返回0。这是cURL的设计逻辑,和HTTP版本无关。

要可靠检测非成功HTTP状态码,有几种实用方法:

  • 用-f参数让cURL在错误状态码时返回非0退出码
    加上-f后,当HTTP状态码≥400时,cURL会直接返回非0退出码,同时默认会抑制错误响应的输出。如果需要保留响应内容,可以结合-o -(将输出定向到标准输出):

    curl -f -u monitor -o - 'https://redacted.server.name/api/status/get-token'
    echo $? # 405状态下会返回非0值
    

    若想同时看到错误提示,可搭配-sS(静默模式但保留错误输出):

    curl -f -sS -u monitor 'https://redacted.server.name/api/status/get-token'
    
  • 用-w参数输出HTTP状态码
    通过-w自定义输出格式,在响应末尾追加HTTP状态码,之后可以通过脚本提取判断:

    curl -u monitor -w "\n%{http_code}" 'https://redacted.server.name/api/status/get-token'
    # 输出会在JSON后多一行状态码,比如405
    

    若要单独获取状态码,可结合-s(静默模式)和-o /dev/null(丢弃响应体):

    HTTP_STATUS=$(curl -s -u monitor -o /dev/null -w "%{http_code}" 'https://redacted.server.name/api/status/get-token')
    if [ "$HTTP_STATUS" -ge 400 ]; then
        echo "请求失败,状态码:$HTTP_STATUS"
    fi
    
  • 用-I参数查看响应头(注意请求方法变化)
    -I会发送HEAD请求,仅返回响应头,其中包含状态码。但要注意,HEAD请求的服务器行为可能和原GET请求不同,需谨慎使用:

    curl -I -u monitor 'https://redacted.server.name/api/status/get-token'
    

内容的提问来源于stack exchange,提问作者U. Windl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:55:11