requests.codes.ok 是否包含 304?
我有一个程序,它使用requests模块发送一个GET请求,结果正确地返回了304 "未修改"。在发出请求后,我检查一下response.status_code == requests.codes.ok
,但是这个检查失败了。requests模块是不是不把304当作“正常”状态呢?
4 个回答
0
.ok
"..如果状态码在200到400之间,这个会返回True。"
"""如果
status_code
小于400,就返回True;否则返回False。 这个属性会检查响应的状态码是否在400到600之间,以判断是否有客户端错误或服务器错误。如果状态码在200到400之间,这个会返回True。这不是用来检查响应码是否是200 OK
。"""
4
你可以在这里查看requests.status代码的实现,链接是源代码。
这个实现让你可以像下面这样访问各种状态码:
import requests
import traceback
url = "https://google.com"
req = requests.get(url)
try:
if req.status_code == requests.codes['ok']: # Check the source code for all the codes
print('200')
elif req.status_code == requests.codes['not_modified']: # 304
print("304")
elifreq.status_code == requests.codes['not_found']: # 404
print("404")
else:
print("None of the codes")
except:
traceback.print_exc(file=sys.stdout)
总之,你可以像示例那样访问任何请求和响应。我相信还有更好的方法,但这个对我来说是有效的。
49
在 Response
对象中,有一个叫做 ok
的属性。如果状态码不是 4xx
或 5xx
,这个属性会返回 True
。
所以你可以这样做:
if response.ok:
# 304 is included
这个属性的代码其实很简单:
@property
def ok(self):
try:
self.raise_for_status()
except HTTPError:
return False
return True
28
你可以在这个链接查看实际的代码:源代码。这里的 ok
只表示状态码 200。