답변:
curl --fail
당신이 원하는 것의 일부를 수행합니다 :
부터 man curl
:
-f, --fail
(HTTP) 서버 오류에서 자동으로 실패합니다 (아무 것도 출력되지 않음). 이것은 대부분 실패한 시도를보다 잘 처리하기 위해 스크립트 등을 더 잘 활성화하기 위해 수행됩니다. 일반적으로 HTTP 서버가 문서를 전달하지 못하면 HTML 문서를 리턴합니다 (이유 및 그 밖의 이유도 설명 함). 이 플래그는 curl이이를 출력하지 못하게하고 오류 22를 리턴합니다.
이 방법은 안전하지 않으며 인증이 실패 할 때 (응답 코드 401 및 407) 실패한 응답 코드가 미끄러지는 경우가 있습니다.
그러나 화면으로의 출력을 차단합니다.
말린 페이지의 내용 만 표시하려면 다음을 수행하십시오.
STATUSCODE=$(curl --silent --output /dev/stderr --write-out "%{http_code}" URL)
if test $STATUSCODE -ne 200; then
# error handling
fi
이는 HTTP 상태 코드를 STDOUT에 쓰는 동안 페이지 컨텐츠를 STDERR에 기록하므로 변수 STATUSCODE에 지정할 수 있습니다 .
0
스크립트에서 비 상태 코드를 반환 하려면 어떻게해야합니까?
if [ "$statuscode" -ne 200 ]; then exit "$statuscode"; fi
어때요?
{ code=$(curl ... as above ...); } 2>&1
트릭은 { ... } 2>&1
다른 쉘 등의 산란되지 동안 즉, 리디렉션을 허용 ( ... )
것입니다.
플래그 조합을 사용하여 수행 할 수있었습니다.
curl --silent --show-error --fail URL
--silent 는 진행률을 숨기고 오류
--show-error 는 요청이 실패하면 --silent
--fail에 의해 숨겨진 오류 메시지를 표시 합니다.
--silent --show-error --fail
작품과 동일합니다 -f/--fail
.
네, 할 수있는 방법이 있지만 3 가지 컬 옵션이 포함되어 있기 때문에 분명하지 않습니다.
curl -s --fail --show-error https://httpbin.org/status/200 > /dev/null
curl -s --fail --show-error https://httpbin.org/status/401 > /dev/null
curl -s --fail --show-error https://httpbin.org/status/404 > /dev/null
curl -s --fail --show-error https://bleah-some-wrong-host > /dev/null
이것은 최종 2xx
리턴 코드로 curl end-us를 수행 할 때만 성공 (0)이 발생 stdout
하고 본문 을 가져오고 오류가 stderr에 표시되도록합니다.
curl 문서는 --fail이 일부 401 코드에서 성공할 수 있다고 언급하기 때문에 약간 혼동 될 수 있습니다. 적어도 --show-error와 동시에 사용될 때는 사실이 아닌 테스트를 기반으로합니다.
지금까지 curl이 이러한 옵션을 사용하는 http가 아닌 경우 curl이 성공을 반환하는 경우를 찾을 수 없었습니다.