一般在使用 curl 去存取某個網路資源時,只要可以連上並存取,curl 的 exit code 就會是 0。
可是很常見的情境是會想要加上 HTTP 狀態碼的判斷,例如 404 表示 not found,這時候就只能用 -I(即 -X HEAD) 再加上 -v 去取得 HTTP 請求回應標頭裡的狀態碼,再來判斷。
curlf() {
OUTPUT_FILE=$(mktemp)
HTTP_CODE=$(curl --silent --output $OUTPUT_FILE --write-out "%{http_code}" "$@")
if [[ ${HTTP_CODE} -lt 200 || ${HTTP_CODE} -gt 299 ]] ; then
>&2 cat $OUTPUT_FILE
return 22
fi
cat $OUTPUT_FILE
rm $OUTPUT_FILE
}
還好,在 curl 7.76 以後的版本加入了 --fail-with-body
/–fail ,使用這個參數就可以不用那麼複雜的判斷,當 HTTP 狀態碼不是 2XX ,exit code 就不會是 0 了,而會是 22,22 表示 。
curl -sI --fail-with-body http://example.com/not-found/
echo $?
22
這樣以後就不需要解析請求回應標頭裡的狀態碼了。
沒有留言:
張貼留言