Как правильно делать HTTP-запросы из Python — requests и httpx?
- Зачем указывать 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 — он не блокирует цикл событий
- ✓Для многих запросов использовать сессию или клиент
Разбор темы
- Веб на Python — WSGI и ASGI, FastAPI, HTTP-клиенты, JSON, Django ORM
Чем WSGI отличается от ASGI, простой API на FastAPI и внедрение зависимостей, requests и httpx с таймаутами, JSON с датами и деньгами, N+1 в Django.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.