curl을 사용하여 HTTP 게시물을 통해 파일을 서버에 업로드하고 있습니다.
curl -X POST -d@myfile.txt server-URL
명령 행에서이 명령을 수동으로 실행하면 서버에서 다음과 같은 응답을받습니다 "Upload successful"
. 그러나 스크립트를 통해이 curl 명령을 실행하려면 POST 요청이 성공했는지 어떻게 알 수 있습니까?
답변
가장 간단한 방법은 응답을 저장하고 비교하는 것입니다.
$ 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;
나는이 형식 이 종종 선호 된다고 생각 하지만 개인적 으로 는 읽기가 어렵다.
답변
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!"