[shell] 응답과 함께 http 상태 코드를 반환하는 Curl

curl을 사용하여 http 헤더를 가져와 http 상태 코드를 찾고 응답도 반환합니다. 명령으로 http 헤더를 얻습니다.

curl -I http://localhost

응답을 얻으려면 다음 명령을 사용합니다.

curl http://localhost

-I 플래그를 사용하자마자 헤더 만 가져오고 응답은 더 이상 존재하지 않습니다. 하나의 명령으로 http 응답과 헤더 / http 상태 코드를 모두 얻는 방법이 있습니까?



답변

-출력을 stdout으로 가져 오기 위해 사용하도록 지정하는 curl 문서를보고 솔루션을 얻을 수있었습니다 .

curl -o - http://localhost

http 반환 코드만으로 응답을 얻으려면 다음을 수행하십시오.

curl -o /dev/null -s -w "%{http_code}\n" http://localhost


답변

상세 모드는 모든 것을 알려줍니다.

curl -v http://localhost


답변

이 명령을 사용하여 다른 출력없이 상태 코드를 인쇄합니다. 또한 HEAD 요청 만 수행하고 리디렉션 (각각 -I-L)을 따릅니다 .

curl -o -I -L -s -w "%{http_code}" http://localhost

이렇게하면 상태 스크립트에서 상태 코드를 매우 쉽게 확인할 수 있습니다.

sh -c '[ $(curl -o -I -L -s -w "%{http_code}" http://localhost) -eq 200 ]'


답변

사용자에 대한 오류 처리를 추가하기 위해 응답과 내용을 모두 원했기 때문에이 질문을 찾았습니다.

HTTP 상태 코드를 인쇄하여 표준 출력하고 다른 파일에 내용을 쓸 수 있습니다.

curl -s -o response.txt -w "%{http_code}" http://example.com

이를 통해 논리를 사용하여 응답을 처리 할 가치가 있는지 결정할 수 있습니다.

http_response=$(curl -s -o response.txt -w "%{http_code}" http://example.com)
if [ $http_response != "200" ]; then
    # handle error
else
    echo "Server returned:"
    cat response.txt
fi


답변

-i옵션은 당신이 원하는 것을 하나입니다 :

curl -i http://localhost

-i, –include 출력에 프로토콜 헤더 포함 (H / F)

또는 verbose 옵션을 사용할 수 있습니다.

curl -v http://localhost

-v, –verbose 작업을 더 수다하게 만듭니다


답변

나는 이것을 사용했다 :

    request_cmd="$(curl -i -o - --silent -X GET --header 'Accept: application/json' --header 'Authorization: _your_auth_code==' 'https://example.com')"

HTTP 상태를 얻으려면

    http_status=$(echo "$request_cmd" | grep HTTP |  awk '{print $2}')
    echo $http_status

응답 본문을 얻으려면 이것을 사용했습니다.

    output_response=$(echo "$request_cmd" | grep body)
    echo $output_response


답변

이 명령

 curl http://localhost -w ", %{http_code}"

쉼표로 구분 된 본문 및 상태를 가져옵니다. 당신은 그들을 분리하기 위해 그들을 나눌 수 있습니다.

원하는대로 구분 기호를 변경할 수 있습니다.