AI Agents · Урок

HTTP-клиенты для агентов: httpx и requests

Синхронные и асинхронные HTTP-запросы, управление сеансами и заголовками.

Урок 1 из 413 шагов

«HTTP-клиенты для агентов: httpx и requests» — бесплатный урок AI Agents на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.

Зачем агентам нужны HTTP-клиенты

AI-агентам часто требуется получать данные из внешних источников: API, веб-сайтов и сервисов. Надёжный HTTP-клиент — основной инструмент в арсенале любого агента.

В Python есть две популярные библиотеки HTTP: requests (синхронная и простая) и httpx (поддерживает синхронный и асинхронный режимы). Для создания эффективных агентов важно понимать, когда использовать каждую из них.

Базовый GET-запрос с requests

Библиотека requests упрощает выполнение обычных HTTP-вызовов. Используйте requests.get(url), чтобы получить ресурс и изучить ответ.

Всегда проверяйте код состояния перед использованием тела ответа, чтобы избежать незаметных сбоев.

import requests

url = 'https://api.example.com/data'
response = requests.get(url)

print(response.status_code)  # 200
print(response.text)         # raw string body
print(response.json())       # parsed JSON dict

Добавление заголовков и времени ожидания

Для большинства API требуются заголовки аутентификации. Параметр headers= позволяет передать словарь заголовков. Всегда задавайте timeout=, чтобы агент не зависал навсегда при работе с медленным сервером.

import requests

headers = {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Accept': 'application/json'
}

response = requests.get(
    'https://api.example.com/items',
    headers=headers,
    timeout=10  # seconds
)

data = response.json()
print(data)

raise_for_status() — быстрый отказ при ошибках

response.raise_for_status() вызывает HTTPError для кодов состояния 4xx и 5xx. Без этого ответа с кодом 404 или 500 молча считаются успешными.

Это рекомендуемый подход при создании агентов: явно сообщайте об ошибках, чтобы агент знал, когда повторить попытку или сообщить об ошибке.

import requests

try:
    response = requests.get('https://api.example.com/missing', timeout=10)
    response.raise_for_status()  # raises if status >= 400
    data = response.json()
except requests.HTTPError as e:
    print(f'HTTP error: {e}')
except requests.RequestException as e:
    print(f'Network error: {e}')

Введение в httpx

httpx — современный HTTP-клиент с тем же интерфейсом, что и requests, но с поддержкой асинхронного режима. Он также по умолчанию устанавливает ограничения времени ожидания, что делает его безопаснее для производственных агентов.

Установите его с помощью pip install httpx. Синхронное использование почти идентично requests.

import httpx

response = httpx.get(
    'https://api.example.com/data',
    headers={'Authorization': 'Bearer YOUR_KEY'},
    timeout=10.0
)

response.raise_for_status()
data = response.json()
print(data)

Асинхронный HTTP с httpx.AsyncClient

Когда Ваш агент работает в асинхронном контексте, например с FastAPI или asyncio, используйте httpx.AsyncClient, чтобы не блокировать цикл событий. Оберните его в async with, чтобы соединение гарантированно закрывалось надлежащим образом.

import httpx
import asyncio

async def fetch_data(url: str) -> dict:
    async with httpx.AsyncClient(timeout=10.0) as client:
        response = await client.get(
            url,
            headers={'Authorization': 'Bearer YOUR_KEY'}
        )
        response.raise_for_status()
        return response.json()

# result = asyncio.run(fetch_data('https://api.example.com/data'))

Параллельное выполнение нескольких асинхронных запросов

Одно из главных преимуществ асинхронного HTTP — одновременное получение нескольких URL с помощью asyncio.gather(). Это может значительно ускорить работу агентов, которым перед ответом нужны данные из нескольких конечных точек.

import httpx
import asyncio

async def fetch_all(urls: list) -> list:
    async with httpx.AsyncClient(timeout=10.0) as client:
        tasks = [client.get(url) for url in urls]
        responses = await asyncio.gather(*tasks)
        return [r.json() for r in responses]

urls = [
    'https://api.example.com/item/1',
    'https://api.example.com/item/2',
    'https://api.example.com/item/3'
]
# results = asyncio.run(fetch_all(urls))

Повторное использование сеансов и объединение соединений

Создание нового HTTP-соединения для каждого запроса выполняется медленно. Обе библиотеки поддерживают объединение соединений: requests.Session и httpx.Client повторно используют TCP-соединения и передают общие заголовки и файлы cookie между запросами.

Это особенно полезно для агентов, которые выполняют много вызовов к одному API.

import httpx

# Create once, reuse for many requests
client = httpx.Client(
    base_url='https://api.example.com',
    headers={'Authorization': 'Bearer YOUR_KEY'},
    timeout=10.0
)

response1 = client.get('/users')
response2 = client.get('/items')
response3 = client.get('/orders')

client.close()  # always close when done

Отправка POST-запросов с телом JSON

Агентам часто нужно не только читать данные, но и отправлять их. Используйте параметр json=, чтобы автоматически сериализовать словарь Python и задать правильный заголовок Content-Type.

import httpx

payload = {
    'query': 'latest AI news',
    'max_results': 5,
    'language': 'en'
}

response = httpx.post(
    'https://api.example.com/search',
    json=payload,
    headers={'Authorization': 'Bearer YOUR_KEY'},
    timeout=15.0
)

response.raise_for_status()
results = response.json()
print(results['items'])

Разбор ответа: текст, json и content

У объекта ответа есть три основных свойства тела:

  • .text — декодированная строка (HTML, XML или обычный текст)
  • .json() — преобразует JSON в словарь или список Python
  • .content — необработанные байты (для изображений или двоичных файлов)

Выбирайте подходящее свойство в зависимости от типа содержимого, указанного API.

import httpx

response = httpx.get('https://api.example.com/report', timeout=10.0)

# For JSON APIs
data = response.json()            # dict or list

# For HTML or plain text
html = response.text              # str

# For binary files
image_bytes = response.content    # bytes

print(type(data), type(html), type(image_bytes))

Объединяем всё: инструмент получения данных по HTTP для агента

Ниже приведена полная универсальная функция получения данных, которую агент может вызывать как инструмент. Она корректно обрабатывает ошибки, записывает запрос в журнал и возвращает структурированные данные.

Этот шаблон служит надёжной основой для любого инструмента агента, получающего данные из веб-источников.

import httpx
import logging

logger = logging.getLogger(__name__)

def agent_fetch(url: str, headers: dict = None) -> dict:
    try:
        response = httpx.get(
            url,
            headers=headers or {},
            timeout=10.0
        )
        response.raise_for_status()
        logger.info(f'Fetched {url} -> {response.status_code}')
        return {'success': True, 'data': response.json()}
    except httpx.HTTPStatusError as e:
        return {'success': False, 'error': str(e)}
    except httpx.RequestError as e:
        return {'success': False, 'error': f'Network error: {e}'}

Проверка знаний: HTTP-клиенты

Проверьте, насколько хорошо Вы понимаете использование HTTP-клиентов в агентах.

Повторение: HTTP-клиенты для агентов

В этом уроке Вы узнали, как оснастить агентов надёжными возможностями получения данных по HTTP:

  • Используйте requests для простого синхронного получения данных
  • Используйте httpx.AsyncClient для неблокирующих асинхронных запросов
  • Всегда задавайте timeout= и вызывайте raise_for_status()
  • Повторно используйте сеансы и клиенты для нескольких вызовов к одному узлу
  • Используйте .json(), .text или .content в зависимости от типа ответа

Хорошо написанный инструмент получения данных служит связующим звеном между Вашим агентом и веб-средой.

Можно начать бесплатно

Изучай AI Agents с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
60
Уроки
239

Часто задаваемые вопросы

Урок «HTTP-клиенты для агентов: httpx и requests» бесплатный?

Да — полный текст урока «HTTP-клиенты для агентов: httpx и requests» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.

Чему я научусь в уроке «HTTP-клиенты для агентов: httpx и requests»?

Синхронные и асинхронные HTTP-запросы, управление сеансами и заголовками. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Agents?

Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «HTTP-клиенты для агентов: httpx и requests»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Agents?

Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. HTTP-клиенты для агентов: httpx и requests
  2. Разбор HTML с помощью BeautifulSoup
  3. Обработка разбиения на страницы и динамического содержимого
  4. Корректные методы веб-скрейпинга
← Назад к AI Agents