Каждый раз когда твоя программа делает запрос к API, сервер отвечает не только данными — он отвечает статус-кодом. Это трёхзначное число которое говорит: «всё хорошо», «такого нет», «нет доступа» или «я сломался».
Структура статус-кода
Статус-коды разбиты по группам:
| Диапазон | Значение |
|---|---|
| 1xx | Информационные (редко видишь) |
| 2xx | Успех ✅ |
| 3xx | Перенаправление |
| 4xx | Ошибка на стороне клиента (твоя ошибка) |
| 5xx | Ошибка на стороне сервера |
Самые важные коды
200 OK
Всё хорошо. Запрос выполнен, данные получены.
response = requests.get("https://api.chucknorris.io/jokes/random")
print(response.status_code) # 200
201 Created
Ресурс успешно создан. Получаешь в ответ на POST-запрос (создание репозитория, публикация статьи).
204 No Content
Успех, но тело ответа пустое. Например при удалении записи.
400 Bad Request
Неверный запрос — сервер не понял что ты хочешь. Например передал неверный параметр.
{"cod": "400", "message": "bad request"}
401 Unauthorized
Не авторизован. Нет или неверный API-ключ.
{"cod": 401, "message": "Invalid API key"}
403 Forbidden
Авторизован, но нет прав. Например пытаешься изменить чужой репозиторий.
404 Not Found
Не найдено. Неверный URL или запрашиваемый объект не существует.
{"cod": "404", "message": "city not found"}
422 Unprocessable Entity
Синтаксис запроса правильный, но данные некорректны (например дата в неверном формате).
429 Too Many Requests
Превышен лимит запросов. Подожди и попробуй снова.
500 Internal Server Error
Сервер сломался. Это не твоя ошибка — проблема на стороне сервиса.
502 Bad Gateway / 503 Service Unavailable
Сервер временно недоступен. Попробуй позже.
Как работать со статус-кодами в Python
Способ 1 — проверка вручную
response = requests.get(url, params=params)
if response.status_code == 200:
data = response.json()
elif response.status_code == 404:
print("Не найдено")
elif response.status_code == 401:
print("Неверный ключ")
Способ 2 — raise_for_status()
Метод raise_for_status() автоматически бросает HTTPError если код >= 400:
try:
response = requests.get(url, params=params)
response.raise_for_status() # ← выбросит ошибку при 4xx или 5xx
data = response.json()
except requests.exceptions.HTTPError as e:
print(f"Ошибка: {e.response.status_code}")
Способ 2 лаконичнее и идиоматичнее — используй его в production-коде.
Правило 4xx vs 5xx
- 4xx — ты что-то сделал не так. Исправляй запрос.
- 5xx — сервер что-то сделал не так. Жди или сообщи в поддержку.
Практика: смотрим коды в браузере
- Открой DevTools (F12) → вкладка Network
- Перейди на любой сайт
- Кликни на любой запрос
- В разделе Headers найди Status Code
Ты увидишь 200 для успешных ресурсов, 304 (Not Modified, из кэша) для ресурсов которые не изменились.
💬 Comments (0)
No comments yet
Be the first to share your opinion about this article!