컬과 같은 명령이 오류 없이 완료되었는지 확인하는 방법은 무엇입니까?

컬과 같은 명령이 오류 없이 완료되었는지 확인하는 방법은 무엇입니까?

컬을 사용하여 HTTP 포스트를 통해 서버에 파일을 업로드하고 있습니다.

curl -X POST [email protected] server-URL

명령줄에서 이 명령을 수동으로 실행하면 서버로부터 응답을 받습니다(예: ) "Upload successful". 그러나 스크립트를 통해 이 컬 명령을 실행하려는 경우 POST 요청이 성공했는지 어떻게 알 수 있습니까?

답변1

curl's --fail옵션을 사용할 수도 있지만 먼저 테스트해야 합니다.

man curl

-f, --fail (HTTP) 서버 오류 시 자동으로 실패합니다(출력 없음). 이는 실패한 시도를 더 잘 처리하기 위해 스크립트 등을 더 잘 활성화하기 위해 주로 수행됩니다. 일반적인 상황에서 HTTP 서버가 문서를 전달할 수 없으면 상황을 설명하는 HTML 문서를 반환합니다(일반적으로 이유와 추가 정보도 설명). 이 플래그는 컬이 이 정보를 출력하지 못하게 하고 오류 22를 반환합니다.

          This method is not fail-safe and there are occasions where  non-
          successful  response  codes  will  slip through, especially when
          authentication is involved (response codes 401 and 407).

그래서 당신은 이것을 할 수 있습니다 :

args="-X POST [email protected] server-URL"
curl -f $args && echo "SUCCESS!" ||
    echo "OH NO!"

답변2

가장 간단한 방법은 응답을 저장하고 비교하는 것입니다.

$ response=$(curl -X POST [email protected] server-URL);
$ if [ "Upload successful" == "${response}" ]; then … fi;

아직 테스트하지 않았습니다. 구문이 틀렸을 수도 있지만 그게 아이디어입니다. 컬의 종료 코드를 확인하는 것과 같은 더 정교한 방법이 있을 것이라고 확신합니다.

고쳐 쓰다

curl꽤 많은 종료 코드를 반환합니다. 실패한 게시물로 인해 55 Failed sending network data.()와 비교하여 종료 코드가 0인지 확인할 수 있다고 추측합니다.$?Expands to the exit status of the most recently executed foreground pipeline.

$ curl -X POST [email protected] server-URL;
$ if [ 0 -eq $? ]; then … fi;

또는 명령이 상대적으로 짧고 실패할 경우 작업을 수행하려는 경우 조건문의 조건부로 종료 코드를 사용할 수 있습니다.

$ if curl --fail -X POST [email protected] server-URL; then
    # …(success)
else
    # …(failure)
fi;

내 생각엔 이 형식이일반적으로 선호, 그러나 개인적으로 읽기가 쉽지 않다고 생각합니다.

관련 정보