При написании bash скрипта, в некоторых случаях может потребоваться получить код ответа (http status code) и в зависимости от кода выводить тело сообщения, при этом не выполняя два запроса в URL, так как результат может отличаться ну или в случае с API запустить ненужные действия.
Если тело ответа не требуется, можно получить просто код "Curl: Получить код статуса страницы (http code)"
Для получения сразу кода ответа и тела запроса, будем комбинировать их в одной переменной, после чего разделять.
Решение костыльное, но работает.
1 2 3 4 5 6 7 8 9 | URL="http://example.com/" RESPONSE=$(curl --silent --write-out "HTTPSTATUS:%{http_code}" -X POST $URL) # Извлекаем тело ответа BODY=$(echo $RESPONSE| sed -e 's/HTTPSTATUS\:.*//g') # Извлекаем статус код STATUS=$(echo $RESPONSE| tr -d '\n' | sed -e 's/.*HTTPSTATUS://') |
Пример использования для API, если ответ 200 выполнить действие, в противном случае вывести ответ веб сервера.
1 2 3 4 5 6 | if [ $HTTP_STATUS -eq 200 ] then //action else echo $BODY fi |