我想检查 HTTP(S) URL 返回的 HTTP 状态代码是什么。我不关心内容,所以我只使用 curl -I $url 或 curl --head $url 请求 head
但是我应该检查退出代码是什么,例如子进程.check_call? 特别是,我是否获得 HTTP 403 的非零退出代码?
答案1
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
答案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)