3

Я хочу проверить, какой код статуса HTTP возвращается для HTTP(S) URL. Меня не волнует содержание, поэтому я просто запрашиваю заголовок с помощью curl -I $ url или curl --head $ url

Но какой код выхода я должен проверить, например, в subprocess.check_call? В частности, могу ли я получить ненулевой код выхода для HTTP 403?

2 ответа2

5

curl -I всегда будет возвращать 0 , если ему удалось произвести вывод с HEAD. У вас есть две альтернативы.

Во-первых, вместо этого используйте 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
1

Если вы действительно хотите получить коды состояния HTTP из скрипта Python, вы можете проверить библиотеку «запросов»:
http://docs.python-requests.org/en/latest/

#Prints status code:
import requests r = requests.get('http://superuser.com') print(r.status_code)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .