0Pricing
AI Agents · Lekcja

Klienty HTTP dla agentów: httpx i requests

Synchroniczne i asynchroniczne żądania HTTP, zarządzanie sesjami i nagłówki.

Klienty HTTP dla agentów: httpx i requests to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.

Dlaczego klienty HTTP są ważne dla agentów

Agenci AI często muszą pobierać dane ze źródeł zewnętrznych: API, stron internetowych i usług. Niezawodny klient HTTP jest podstawowym narzędziem w zestawie narzędzi każdego agenta.

Python ma dwie popularne biblioteki HTTP: requests (synchroniczna, prosta) i httpx (obsługuje tryb synchroniczny i asynchroniczny). Zrozumienie, kiedy użyć każdej z nich, jest niezbędne do tworzenia wydajnych agentów.

Podstawowe żądanie GET z requests

Biblioteka requests ułatwia wykonywanie prostych wywołań HTTP. Należy użyć requests.get(url), aby pobrać zasób i sprawdzić odpowiedź.

Zawsze należy sprawdzić kod stanu przed użyciem treści odpowiedzi, aby uniknąć niezauważonych niepowodzeń.

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

Dodawanie nagłówków i limitów czasu

Większość interfejsów API wymaga nagłówków uwierzytelniania. Parametr headers= pozwala przekazać słownik nagłówków. Zawsze należy ustawić timeout=, aby zapobiec nieograniczonemu oczekiwaniu agenta na wolny serwer.

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() — natychmiastowe kończenie w razie błędów

response.raise_for_status() zgłasza wyjątek HTTPError dla kodów stanu 4xx i 5xx. Bez tego odpowiedź 404 lub 500 jest po cichu traktowana jako powodzenie.

To dobra praktyka w przypadku agentów: należy wyraźnie zgłaszać błędy, aby agent wiedział, że powinien ponowić próbę lub zgłosić błąd.

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}')

Wprowadzenie do httpx

httpx to nowoczesny klient HTTP z takim samym API jak requests, ale z dodatkową obsługą asynchroniczności. Domyślnie wymusza również limity czasu, dzięki czemu jest bezpieczniejszy w agentach produkcyjnych.

Należy zainstalować go za pomocą pip install httpx. Użycie synchroniczne wygląda niemal identycznie jak w 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)

Asynchroniczne żądania HTTP z httpx.AsyncClient

Gdy agent działa w kontekście asynchronicznym (np. z FastAPI lub asyncio), należy użyć httpx.AsyncClient, aby nie blokować pętli zdarzeń. Należy umieścić go w bloku async with, aby mieć pewność, że połączenie zostanie prawidłowo zamknięte.

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'))

Równoczesne wykonywanie wielu żądań asynchronicznych

Jedną z głównych zalet asynchronicznego HTTP jest możliwość jednoczesnego pobierania wielu adresów URL za pomocą asyncio.gather(). Może to znacznie przyspieszyć działanie agentów, które przed udzieleniem odpowiedzi muszą pobrać dane z kilku punktów końcowych.

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))

Ponowne używanie sesji i pula połączeń

Tworzenie nowego połączenia HTTP dla każdego żądania jest powolne. Obie biblioteki obsługują pulę połączeń: requests.Session i httpx.Client ponownie wykorzystują połączenia TCP oraz współdzielą nagłówki i ciasteczka między żądaniami.

Jest to szczególnie przydatne w przypadku agentów wykonujących wiele wywołań do tego samego 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

Wysyłanie żądań POST z treścią JSON

Agenci często muszą wysyłać dane, a nie tylko je odczytywać. Należy użyć parametru json=, aby automatycznie zserializować słownik Pythona i ustawić właściwy nagłówek 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'])

Analizowanie odpowiedzi: text, json i content

Obiekt odpowiedzi ma trzy główne właściwości treści:

  • .text — zdekodowany ciąg znaków (HTML, XML, zwykły tekst)
  • .json() — analizuje JSON i przekształca go w słownik lub listę Pythona
  • .content — surowe bajty (w przypadku obrazów lub plików binarnych)

Należy wybrać właściwość odpowiednią do typu treści zwracanej przez 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))

Łączymy wszystko: narzędzie agenta do pobierania danych HTTP

Oto kompletna funkcja pobierania danych wielokrotnego użytku, którą agent może wywołać jako narzędzie. Funkcja prawidłowo obsługuje błędy, rejestruje żądanie i zwraca uporządkowane dane.

Ten wzorzec stanowi solidną podstawę dowolnego narzędzia agenta pobierającego dane z sieci.

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}'}

Sprawdź wiedzę: klienty HTTP

Proszę sprawdzić swoją wiedzę na temat klientów HTTP dla agentów.

Podsumowanie: klienty HTTP dla agentów

W tej lekcji poznano sposób wyposażania agentów w niezawodne możliwości pobierania danych przez HTTP:

  • Należy używać requests do prostego pobierania synchronicznego
  • Należy używać httpx.AsyncClient do nieblokujących żądań asynchronicznych
  • Zawsze należy ustawiać timeout= i wywoływać raise_for_status()
  • Należy ponownie używać sesji lub klientów przy wielu wywołaniach do tego samego hosta
  • Należy używać .json(), .text lub .content zależnie od typu odpowiedzi

Dobrze napisane narzędzie pobierania danych jest bramą między agentem a siecią.

Często zadawane pytania

Czy lekcja „Klienty HTTP dla agentów: httpx i requests” jest bezpłatna?

Tak — pełny tekst „Klienty HTTP dla agentów: httpx i requests” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.

Co nauczysz się w „Klienty HTTP dla agentów: httpx i requests”?

Synchroniczne i asynchroniczne żądania HTTP, zarządzanie sesjami i nagłówki. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Agents?

Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Klienty HTTP dla agentów: httpx i requests”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?

Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Klienty HTTP dla agentów: httpx i requests
  2. Parsowanie HTML za pomocą BeautifulSoup
  3. Obsługa paginacji i treści dynamicznych
  4. Odpowiedzialne praktyki web scrapingu
← Powrót do AI Agents