Подтвердить что ты не робот

Curl, чтобы вернуть код статуса http вместе с ответом

Я использую завиток, чтобы получить заголовки http, чтобы найти код статуса http, а также вернуть ответ. Я получаю заголовки http с командой

curl -I http://localhost

Чтобы получить ответ, я использую команду

curl http://localhost

Как только я использую флаг -I, я получаю только заголовки, и ответа больше нет. Есть ли способ получить как HTTP-ответ, так и код состояния заголовков /http в одной команде?

4b9b3361

Ответ 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