curl을 사용하여 http 헤더를 가져와 http 상태 코드를 찾고 응답도 반환합니다. 명령으로 http 헤더를 얻습니다.
curl -I http://localhost
응답을 얻으려면 다음 명령을 사용합니다.
curl http://localhost
-I 플래그를 사용하자마자 헤더 만 가져오고 응답은 더 이상 존재하지 않습니다. 하나의 명령으로 http 응답과 헤더 / http 상태 코드를 모두 얻는 방법이 있습니까?
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
-i. 또는 -v추가 정보가 마음에 들면 아마도 .
-o -I-ICWD에서 문자 그대로 ' ' 라는 파일을 생성합니다 . 다른 사람이 이것을 보나요? 그 해결책은-o/dev/null -I
상세 모드는 모든 것을 알려줍니다.
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 ]'
curl -o -I -L -s -w "%{http_code}" http://localhost파일이 호출 만들어집니다를 -I해결하기 위해이 나는 암시 파일 출력을위한 장소 추가 -o즉, 이동을 /dev/null:curl -o /dev/null -I -L -s -w "%{http_code}" http://localhost
사용자에 대한 오류 처리를 추가하기 위해 응답과 내용을 모두 원했기 때문에이 질문을 찾았습니다.
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
나는 이것을 사용했다 :
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}"
쉼표로 구분 된 본문 및 상태를 가져옵니다. 당신은 그들을 분리하기 위해 그들을 나눌 수 있습니다.
원하는대로 구분 기호를 변경할 수 있습니다.
프로그래밍 방식으로 사용하려면 다음을 사용합니다.
curlwithcode() {
code=0
# Run curl in a separate command, capturing output of -w "%{http_code}" into statuscode
# and sending the content to a file with -o >(cat >/tmp/curl_body)
statuscode=$(curl -w "%{http_code}" \
-o >(cat >/tmp/curl_body) \
"$@"
) || code="$?"
body="$(cat /tmp/curl_body)"
echo "statuscode : $statuscode"
echo "exitcode : $code"
echo "body : $body"
}
curlwithcode https://api.github.com/users/tj
다음과 같은 출력이 표시됩니다.
statuscode : 200
exitcode : 0
body : {
"login": "tj",
"id": 25254,
...
}
이것은 본문 "AND"상태 코드를 검색하고 적절한 json 또는 사용자에게 적합한 형식으로 형식화하는 방법입니다. 일부는 쓰기 형식 옵션의 잘못된 사용이라고 주장 할 수 있지만 상태 코드를 확인하고 서버의 응답을 다시 릴레이하기 위해 스크립트에 본문 및 상태 코드가 모두 필요할 때 작동합니다.
curl -X GET -w "%{stderr}{\"status\": \"%{http_code}\", \"body\":\"%{stdout}\"}" -s -o - “https://github.com” 2>&1
위의 코드를 실행하면 다음 형식으로 json을 가져와야합니다.
{
"status" : <status code>,
"body" : <body of response>
}
-w 쓰기 형식 옵션을 사용하면 stderr이 먼저 인쇄되므로 var http_code로 출력을 형식화하고 응답 본문을 값 (본문)에 배치하고 var stdout을 사용하여 엔 클로징을 수행 할 수 있습니다. 그런 다음 stderr 출력을 stdout으로 리디렉션하면 http_code와 응답 본문을 모두 깔끔한 출력으로 결합 할 수 있습니다.
curl: unknown --write-out variable: 'stderr'그리고curl: unknown --write-out variable: 'stdout'
이것을 달성하는 내 방법 :
머리글과 본문을 모두 얻으려면 일반적으로 다음과 curl -D- <url>같이 수행합니다 .
$ curl -D- http://localhost:1234/foo
HTTP/1.1 200 OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Date: Wed, 29 Jul 2020 20:59:21 GMT
{"data":["out.csv"]}
헤더 ( -D)를 stdout ( -)으로 덤프합니다 ( man curl--dump-header 에서 찾으 십시오 ).
IMHO는 또한이 맥락에서 매우 편리합니다.
나는 종종 jq 를 사용 하여 json 데이터 (예 : 일부 나머지 API에서)를 형식화합니다. 그러나 jq는 HTTP 헤더를 기대하지 않기 때문에 트릭은를 사용하여 헤더를 stderr에 인쇄하는 것 -D/dev/stderr입니다. 이번에는 -sS(--silent, --show-errors)를 사용하여 진행률 표시기를 억제합니다 (파이프에 쓰기 때문에).
$ curl -sSD/dev/stderr http://localhost:1231/foo | jq .
HTTP/1.1 200 OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Date: Wed, 29 Jul 2020 21:08:22 GMT
{
"data": [
"out.csv"
]
}
(빠른 검사를 위해) 헤더를 콘솔에 인쇄하고 본문을 파일로 리디렉션하려는 경우에도 유용 할 수 있다고 생각합니다 (예 : 터미널을 엉망으로 만들지 않는 일종의 바이너리).
$ curl -sSD/dev/stderr http://localhost:1231 > /dev/null
HTTP/1.1 200 OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Date: Wed, 29 Jul 2020 21:20:02 GMT
주의 : 이것은 curl -I <url>! 으로는 -I수행 HEAD요청이 아닌 GET요청 (봐 --head에 사람 컬 대부분의 HTTP 서버의 경우이 같은 결과를 얻을 것입니다하지만 구현하지 않는 비즈니스 응용 프로그램을 많이 알고있다. 예. HEAD모든 ;-P에서 요청을