Включает ли request.codes.ok 304?

У меня есть программа, которая использует модуль запросов для отправки запроса на получение, который (правильно) отвечает 304 "Не изменено". Сделав запрос, я проверяю, чтобы убедиться, response.status_code == requests.codes.ok, но эта проверка не проходит. Разве запросы не считают 304 "хорошо"?

4 ответа

Решение

Вы можете проверить фактические коды в источнике. ok значит только 200.

Есть свойство под названием ok в Response объект, который возвращает True если код состояния не является 4xx или 5xx,

Таким образом, вы можете сделать следующее:

if response.ok:
    # 304 is included

Код этого свойства довольно прост:

@property
def ok(self):
    try:
        self.raise_for_status()
    except HTTPError:
        return False
    return True

Вы можете проверить реализацию кода questions.status здесь исходного кода.
Реализация позволяет вам получить доступ ко всем / любым видам кодов 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("Non of the codes")
except:
    traceback.print_exc(file=sys.stdout)

В заключение вы можете получить доступ к любому запросу-ответу, как показано. Я уверен, что есть лучшие способы, но это сработало для меня.

.ok «…Если код состояния находится в диапазоне от 200 до 400, это вернет True».

упоминается в исходном коде как:

"""Возвращает True, если :attr: status_codeменьше 400, False, если нет. Этот атрибут проверяет, находится ли код состояния ответа в диапазоне от 400 до 600, чтобы определить, произошла ли ошибка клиента или ошибка сервера. Если код состояния находится в диапазоне от 200 до 400, будет возвращено значение True. Это не проверка того, является ли код ответа 200 OK. """

Другие вопросы по тегам