Я всегда предполагал, что когда curl получил ответ HTTP 500, он возвращал код выхода, который означал сбой (! = 0), но, похоже, это не так.
Есть ли способ, как я могу сделать сбой cURL с кодом выхода, отличным от 0, если код состояния HTTP не 200? Я знаю, что могу использовать, -w "%{http_code}"
но это помещает его в STDOUT, а не в качестве кода выхода (кроме того, я также заинтересован в захвате вывода, который я не хочу перенаправлять в файл, но на экран).
curl -f -L
смотрите этот вопрос для получения подробной информации о том, что-L
делает.Если вы просто хотите отобразить содержимое скрученной страницы, вы можете сделать это:
При этом содержимое страницы записывается в STDERR при записи кода состояния HTTP в STDOUT, поэтому его можно назначить переменной STATUSCODE .
источник
0
код не состояния из сценария?if [ "$statuscode" -ne 200 ]; then exit "$statuscode"; fi
?{ code=$(curl ... as above ...); } 2>&1
хитрость заключается в{ ... } 2>&1
том, что позволяет перенаправлять, не вызывая при этом другую оболочку, как это( ... )
было бы.Я смог сделать это с помощью комбинации флагов:
curl --silent --show-error --fail URL
--silent скрывает прогресс и ошибку.
--show-error показывает сообщение об ошибке, скрытое параметром
--silent
--fail возвращает код завершения> 0 при сбое запроса.
источник
--silent --show-error --fail
работает так же, как и просто-f/--fail
.--fail
возвращает код завершения22
, как задокументировано .Да, есть способ сделать это, но он далеко не очевиден, так как включает в себя 3 варианта скручивания:
Это гарантирует, что success (0) происходит только тогда, когда curl завершает работу с окончательным
2xx
кодом возврата, и этоstdout
получает тело, и что любые ошибки будут отображаться в stderr.Обратите внимание, что документация curl может вас немного смущать, поскольку в ней упоминается, что --fail может успешно завершиться для некоторых кодов 401. Основано на тестах, которые не соответствуют действительности, по крайней мере, при использовании с --show-error одновременно.
До сих пор я не смог найти ни одного случая, когда curl вернет успех, когда он не был http-success с этими опциями.
источник