请求.codes.ok是否包含304?

ste*_*ett 12 python http-status-code-304 python-requests

我有一个程序,它使用请求模块发送一个get请求,它正确地响应304"Not Modified".发出请求后,我检查确认response.status_code == requests.codes.ok,但此检查失败.请求不将304视为"ok"吗?

Dmi*_*nko 19

您可以在源中检查实际代码.ok仅指200.

  • 谢谢 - 哈 - 我从未意识到'✓'字符也被映射到200. (5认同)
  • @MattiLyra 你在这里实际上是不正确的。`requests.codes.ok` 与 `requests.models.Response.ok` 不同。对于 200 <= status_code < 400 的值,`requests.models.Response.ok` 确实返回 true 是正确的,但是 `requests.codes.ok` 只是值 200。你可以通过 `import 亲眼看看要求; 打印(requests.codes.ok)` (4认同)
  • 根据文档 [http://docs.python-requests.org/en/master/api/#requests.Response.ok] 和来源 [http://docs.python- requests.org/en/master/_modules/requests/models/#Response.raise_for_status] (2认同)

dar*_*eir 19

如果状态代码不是a 或a ,则okResponse对象中调用一个属性.True4xx5xx

所以你可以做到以下几点:

if response.ok:
    # 304 is included
Run Code Online (Sandbox Code Playgroud)

这个属性的代码非常简单:

@property
def ok(self):
    try:
        self.raise_for_status()
    except HTTPError:
        return False
    return True
Run Code Online (Sandbox Code Playgroud)