Bash cURL:管理下载错误

Bash cURL:管理下载错误,bash,curl,http-headers,Bash,Curl,Http Headers,我试图编写一个Bash脚本,通过解析响应头来管理cURL下载错误。然而,对于所有Github下载,重定向后的头是HTTP/1.1403禁止的,尽管下载可以工作 function curldown { url="$1" code=$(curl -LI $url | awk '/^HTTP/{a=$2} END{print a}') if [[ "${code:0:1}" == "4" ]]; then echo "Error $code" else

我试图编写一个Bash脚本,通过解析响应头来管理cURL下载错误。然而,对于所有Github下载,重定向后的头是HTTP/1.1403禁止的,尽管下载可以工作

function curldown {

    url="$1"
    code=$(curl -LI $url | awk '/^HTTP/{a=$2} END{print a}')

    if [[ "${code:0:1}"  == "4" ]]; then
    echo "Error $code"
    else
    curl -JOL $url > /tmp/curldown
    fi

}

url='https://github.com/keybase/client/releases/download/v5.1.1/keybase-v5.1.1.tar.xz'
curldown $url
# Error 403
但是

给出一个工作输出

有办法吗

更好的解决方案:

http_code=$(curl -Ls "$url" -w '%{http_code}\n' -o /dev/null)

if ((http_code >= 400)); then
    echo >&2 "Error detected; HTTP code $http_code"
fi

我有一种奇怪的行为。使用提供的Github URL重定向到Amazon,如果使用
curl-LI
,我会得到302和403响应代码,但是
curl-JOL$URL
可以工作。您的代码给出了200个代码,但处理页面需要很长时间。通过删除
-o/dev/null
,它的响应是立即的,但是如果数据是非二进制的,我会打印页面内容。
http_code=$(curl -Ls "$url" -w '%{http_code}\n' -o /dev/null)

if ((http_code >= 400)); then
    echo >&2 "Error detected; HTTP code $http_code"
fi