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


24

curl을 사용하여 HTTP 게시물을 통해 파일을 서버에 업로드하고 있습니다.

curl -X POST -d@myfile.txt server-URL

명령 행에서이 명령을 수동으로 실행하면 서버에서 다음과 같은 응답을받습니다 "Upload successful". 그러나 스크립트를 통해이 curl 명령을 실행하려면 POST 요청이 성공했는지 어떻게 알 수 있습니까?

답변:


21

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

$ response=$(curl -X POST -d@myfile.txt server-URL);
$ if [ "Upload successful" == "${response}" ]; then … fi;

나는 그것을 테스트하지 않았습니다. 구문이 꺼져있을 수도 있지만 이것이 바로 아이디어입니다. curl의 종료 코드 또는 무언가를 확인하는 것과 같이보다 정교한 방법이 있다고 확신합니다.

최신 정보

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

$ curl -X POST -d@myfile.txt server-URL;
$ if [ 0 -eq $? ]; then … fi;

또는 명령이 비교적 짧고 실패 할 때 수행하려는 경우 조건 문의 조건으로 종료 코드를 사용할 수 있습니다.

$ if curl --fail -X POST -d@myfile.txt server-URL; then
    # …(success)
else
    # …(failure)
fi;

나는이 형식 이 종종 선호 된다고 생각 하지만 개인적 으로 읽기가 어렵다.


20

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 -d@myfile.txt server-URL"
curl -f $args && echo "SUCCESS!" ||
    echo "OH NO!"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.