当不是 HTTP 200 时,“curl -I”的退出代码是什么?

当不是 HTTP 200 时,“curl -I”的退出代码是什么?

我想检查 HTTP(S) URL 返回的 HTTP 状态代码是什么。我不关心内容,所以我只使用 curl -I $url 或 curl --head $url 请求 head

但是我应该检查退出代码是什么,例如子进程.check_call? 特别是,我是否获得 HTTP 403 的非零退出代码?

答案1

curl -I0如果它能够使用 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

答案2

如果你确实只是想要来自 Python 脚本的 HTTP 状态代码,你可能需要查看“请求”库:
http://docs.python-requests.org/en/latest/

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

相关内容