Qual é o código de saída para “curl -I” quando não é HTTP 200?

3

Quero verificar qual código de status HTTP é retornado para um URL HTTP (S). Eu não me importo com conteúdo, então eu só peço cabeça com   curl -I $ url ou   curl --head $ url

Mas qual é o código de saída que devo verificar, por exemplo em subprocess.check_call ? Em particular, obtenho um código de saída diferente de zero para HTTP 403?

    
por Nemo 18.12.2014 / 12:11

2 respostas

5

curl -I sempre retornará 0 , se conseguir produzir uma saída com o HEAD. Você tem duas alternativas.

O primeiro é usar curl -I --fail em vez e verificar o código de saída 22 .

Se você está fazendo isso em um script Python, pode parecer:

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

A segunda é perguntar apenas o código de status HTTP , assim:

$ curl -s -I -o /dev/null -w '%{http_code}' $bad-url
403
    
por 18.12.2014 / 12:11
1

Se você realmente quer apenas os códigos de status HTTP de um script python, você pode querer verificar a biblioteca de 'solicitações': link

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

    
por 13.05.2015 / 01:33