Curl: сохранить ошибку HTTP в Bash для записи и данных в файл - PullRequest
2 голосов
/ 08 апреля 2020

Я делаю запрос curl в REST API и теперь хочу сохранить код ответа HTTP, только если возникла ошибка, в лог-файл и ответ API в другой файл, если не было ошибок.

Я пытаюсь:

error=$(curl -v -o "test.json" -H "Authorization: Basic ABCDEF" "https://api.abc.com")

и

error=$(curl --fail -o "test.json" -H "Authorization: Basic ABCDEF" "https://api.abc.com")

Если я сделаю if [0 -eq $? ] после запроса curl с --fail I может обнаружить, что произошла ошибка, но я не могу сохранить ошибку HTTP в журнал.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Так как в соответствии с man curl опция --fail

... не является отказоустойчивой, и в некоторых случаях проскакивают неуспешные коды ответа, особенно когда включена аутентификация ( коды ответов 401 и 407).

Вы можете использовать --write-out и http_code.

Числовой код ответа, который был найден в последнем найденном HTTP (S ) или FTP (s) передачи.

Т.е.:

ERROR=$(curl --silent --fail --header "Authorization: Basic ABCDEF" "https://api.abc.com" --output "test.json" --write-out "%{http_code}")
1 голос
/ 08 апреля 2020

Добро пожаловать в stackoverflow.

Это должно сработать.


#send all output to file named out
curl -v -o "test.json" -H "Authorization: Basic ABCDEF" "https://api.abc.com" >out 2>&1
# find HTTP/2 code in the output
error=`grep "HTTP/2" out | tail -1 | rev | cut -c1-5 | rev`
# print the error code
echo $error

Пример выполнения:

mamuns-mac:jenkins xmrashid$ ./get_error.sh
503 
mamuns-mac:jenkins xmrashid$ 

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...