📝 Python

HTTP-статус-коды: что сервер говорит твоей программе

0
Author
04e5cc8b-58ac-4bdc-bdee-661bbb
📅
Published
08.05.2026
⏱️
Reading time
2 min
👁️
Views
21
🌱
Level
Beginner

Каждый раз когда твоя программа делает запрос к 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 — сервер что-то сделал не так. Жди или сообщи в поддержку.

Практика: смотрим коды в браузере

  1. Открой DevTools (F12) → вкладка Network
  2. Перейди на любой сайт
  3. Кликни на любой запрос
  4. В разделе Headers найди Status Code

Ты увидишь 200 для успешных ресурсов, 304 (Not Modified, из кэша) для ресурсов которые не изменились.

Your reaction to the article

💬 Comments (0)

🔐 Sign in to leave a comment
🚪 Login
💭

No comments yet

Be the first to share your opinion about this article!

🔗 Similar

Similar articles

Continue learning with these materials

📝

Модуль datetime: работа с датами и временем

datetime — стандартный модуль Python для работы с датами и временем. Входит в стандартную библиотеку,...

📅 08.05.2026 👁️ 30
📝

.env файлы и переменные окружения: секреты вне ко…

Представь что ты написал программу с API-ключом прямо в коде и залил её на GitHub....

📅 08.05.2026 👁️ 35
📝

Виртуальные окружения в Python: зачем и как

Когда начинаешь второй Python-проект и ставишь pip install requests — эта библиотека устанавливается глобально, для...

📅 08.05.2026 👁️ 31

Did you like the article?

Subscribe to our updates and receive new articles first. Grow with PyLand!