Вопрос с собеседования · Python

Как правильно делать HTTP-запросы из Python — requests и httpx?

JuniorВеб-фреймворки
Ещё спрашивают так:
  • Зачем указывать timeout в requests?
  • Чем httpx отличается от requests?
Коротко

requests — синхронная библиотека, httpx — похожий интерфейс плюс асинхронный клиент и HTTP/2. Обязательные привычки: всегда задавать timeout (по умолчанию requests ждёт бесконечно), проверять статус (raise_for_status), использовать сессию или клиент для многих запросов (переиспользование соединений), не хранить токены в коде. Ошибки сети ловят как исключения библиотеки (requests.RequestException, httpx.HTTPError).

  • Запрос без таймаута может повесить воркер навсегда
  • Повторы — только для безопасных запросов и временных ошибок
  • В асинхронном коде requests блокирует цикл событий — нужен httpx.AsyncClient

А ещё JSON: json= для отправки тела, .json() для разбора ответа

Подробно

Пример:

import httpx

with httpx.Client(base_url="https://api.example.ru", timeout=10) as client:
    r = client.get("/orders", params={"status": "new"},
                   headers={"Authorization": f"Bearer {token}"})
    r.raise_for_status()
    orders = r.json()

Обработка ошибок:

try:
    r = client.post("/orders", json=payload)
    r.raise_for_status()
except httpx.TimeoutException:
    ...  # сервис не ответил вовремя
except httpx.HTTPStatusError as e:
    ...  # 4xx/5xx: e.response.status_code

Что хотят услышать

  • Таймауты обязательны.
  • Проверка статуса и обработка ошибок.
  • Сессия или клиент для переиспользования соединений.
  • httpx для асинхронного кода.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Всегда задавать timeout
  • ✓Проверять код ответа через raise_for_status или явно
  • ✗В асинхронном коде использовать requests — он не блокирует цикл событий
  • ✓Для многих запросов использовать сессию или клиент

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования