Python и работа с API: requests, httpx — туториал

Мы просто и по делу рассказываем про ИИ-инструменты для работы: сравнения, пошаговые гайды, бесплатные альтернативы и реальные сценарии применения. Помогаем выбрать между ChatGPT, Gemini, Claude, локальными моделями и десятками узкоспециализированных сервисов — от дизайна и HR до аналитики и SEO. Меньше хайпа, больше практики и экономии времени каждый день.

pythonrequestshttpx

API — это способ для программ обмениваться данными: получить погоду, отправить сообщение, забрать список товаров, авторизовать пользователя. В Python для этого чаще всего используют requests и httpx.

Когда что выбирать

  • requests — простой и проверенный инструмент для синхронных HTTP-запросов
  • httpx — современная альтернатива с поддержкой и sync, и async, плюс HTTP/2

1. Установка

pip install requests httpx

2. Простой GET-запрос

import requests

response = requests.get("https://api.example.com/users")
print(response.status_code)
print(response.json())

Что важно:
status_code — код ответа сервера
json() — парсинг JSON в Python-словарь
text — если нужен обычный текст

3. Передача параметров

import requests

params = {"page": 1, "limit": 10}
response = requests.get("https://api.example.com/users", params=params)
print(response.url)
print(response.json())

Python сам соберёт URL вида ?page=1&limit=10.

4. POST-запрос с JSON

import requests

data = {"name": "Ivan", "email": "ivan@example.com"}
response = requests.post("https://api.example.com/users", json=data)
print(response.status_code)
print(response.json())

Используйте json=, а не data=, если API ожидает JSON. Это частый поисковый запрос и частая ошибка ⚠️

5. Заголовки и токен авторизации

import requests

headers = {
    "Authorization": "Bearer YOUR_TOKEN",
    "Accept": "application/json"
}
response = requests.get("https://api.example.com/profile", headers=headers)
print(response.json())

6. Обработка ошибок

import requests

try:
    response = requests.get("https://api.example.com/users", timeout=5)
    response.raise_for_status()
    data = response.json()
    print(data)
except requests.exceptions.Timeout:
    print("Таймаут запроса")
except requests.exceptions.HTTPError as e:
    print(f"HTTP ошибка: {e}")
except requests.exceptions.RequestException as e:
    print(f"Ошибка запроса: {e}")

raise_for_status() полезен: сразу ловите 4xx/5xx, а не ищете баг позже 🛠️

7. Тот же запрос через httpx

import httpx

with httpx.Client(timeout=5.0) as client:
    response = client.get("https://api.example.com/users")
    response.raise_for_status()
    print(response.json())

8. Async с httpx

import httpx
import asyncio

async def main():
    async with httpx.AsyncClient(timeout=5.0) as client:
        response = await client.get("https://api.example.com/users")
        response.raise_for_status()
        print(response.json())

asyncio.run(main())

Async полезен, когда нужно делать много запросов параллельно 🚀

Практические советы

всегда ставьте timeout
проверяйте status_code или вызывайте raise_for_status()
храните токены в переменных окружения, не в коде
используйте Session в requests или Client в httpx, если запросов много
читайте документацию API: endpoint, метод, формат данных, лимиты

Что чаще спрашивают

requests или httpx?
Для простых задач — requests. Для новых проектов и async — httpx.

Почему response.json() падает?
Сервер мог вернуть не JSON, а HTML с ошибкой или пустой ответ.

Как отправить form-data?
Используйте data= для форм и files= для файлов 📦

Работа с API в Python сводится к 4 шагам: отправить запрос, передать параметры/заголовки, проверить ответ, обработать ошибки. Для старта хватит requests, для масштабирования и асинхронности удобнее httpx.

👀 Ещё больше полезных материалов — в подборке каналов про IT.

🗣 Подборки каналов
🧠 Каталог ботов и приложений
🗺 Навигация

Читайте так же