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