Завихрение для возврата кода состояния HTTP наряду с ответом

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

curl -I http://localhost

Для получения ответа я использую команду

curl http://localhost

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

62
задан 12 August 2016 в 00:46

8 ответов

Я смог получить решение путем рассмотрения вихревого документа, который указывает для использования - чтобы вывод получил вывод к stdout.

curl -o - http://localhost

Для получения ответа только с http кодом возврата я мог просто сделать

curl -o /dev/null -s -w "%{http_code}\n" http://localhost
66
ответ дан 31 October 2019 в 13:36

Я использую эту команду для печати кода состояния без любого другого вывода. Кроме того, это будет только выполнять ГЛАВНЫЙ запрос и следовать за перенаправлением (соответственно -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 ]'
23
ответ дан 31 October 2019 в 13:36

подробный режим скажет Вам все

curl -v http://localhost
20
ответ дан 31 October 2019 в 13:36

Я использовал это:

    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
12
ответ дан 31 October 2019 в 13:36

Я нашел этот вопрос, потому что я хотел И ответ и содержание для добавления некоторой обработки ошибок для пользователя.

можно распечатать код состояния 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
7
ответ дан 31 October 2019 в 13:36

-i опция является той, которую Вы хотите:

curl -i http://localhost

-i, - включают, Включают заголовки протокола в вывод (H/F)

, Кроме того, можно использовать подробную опцию:

curl -v http://localhost

-v, - подробный Делают операцию больше болтливый

6
ответ дан 31 October 2019 в 13:36

Для программного использования я использую следующее:

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,
  ...
}
5
ответ дан 31 October 2019 в 13:36

Эта команда

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

доберется, запятая разделила тело и состояние; можно разделить их для вывода их.

можно изменить разделитель, как Вам нравится.

4
ответ дан 31 October 2019 в 13:36

Другие вопросы по тегам:

Похожие вопросы: