Curl, чтобы вернуть код статуса http вместе с ответом
Я использую завиток, чтобы получить заголовки http, чтобы найти код статуса http, а также вернуть ответ. Я получаю заголовки http с командой
curl -I http://localhost
Чтобы получить ответ, я использую команду
curl http://localhost
Как только я использую флаг -I, я получаю только заголовки, и ответа больше нет. Есть ли способ получить как HTTP-ответ, так и код состояния заголовков /http в одной команде?
Ответы
Ответ 1
Я смог найти решение, посмотрев на документ curl, в котором указано, использовать ли вывод для вывода на стандартный вывод.
curl -o - http://localhost
Чтобы получить ответ только с кодом возврата http, я мог бы просто сделать
curl -o /dev/null -s -w "%{http_code}\n" http://localhost
Ответ 2
Я использую эту команду для печати кода состояния без каких-либо других выходных данных. Кроме того, он будет выполнять только запрос 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 ]'
Ответ 3
подробный режим расскажет вам все
curl -v http://localhost
Ответ 4
Я использовал это:
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
Ответ 5
Опция -i
- это то, что вам нужно:
curl -i http://localhost
-i, - -i nclude Включить заголовки протокола в вывод (H/F)
В качестве альтернативы вы можете использовать подробный вариант:
curl -v http://localhost
-v, - -v erbose Сделайте операцию более разговорчивой
Ответ 6
Эта команда
curl http://localhost -w ", %{http_code}"
получит разделенное запятыми тело и статус; Вы можете разделить их, чтобы вытащить их.
Вы можете изменить разделитель, как вам нравится.
Ответ 7
Для программного использования я использую следующее:
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) \
"[email protected]"
) || 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,
...
}
Ответ 8
Я нашел этот вопрос, потому что я хотел ОБА ответ и содержание, чтобы добавить некоторую обработку ошибок для пользователя.
Вы можете распечатать код состояния 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