Какой код выхода для "curl -I", если не HTTP 200?

2439
Nemo

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

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

3

2 ответа на вопрос

5
Nemo

curl -I will always return 0, if it managed to produce an output with the HEAD. You have two alternatives.

The first is to use curl -I --fail instead, and check for exit code 22.

If you're doing this in a Python script, it could look like:

try: subprocess.check_call(['curl', '-I', '--fail', url]) except subprocess.CalledProcessError as e: if e.returncode == 22: (do something) 

The second is to actually ask just the HTTP status code, like this:

$ curl -s -I -o /dev/null -w '%' $bad-url 403 
1
Tristan Reid

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

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

Правда, хотя вопрос был о скручивании только по другим причинам. Nemo 9 лет назад 0

Похожие вопросы