Включает ли 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
. """