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 dictDodawanie 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 doneWysył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ć
requestsdo prostego pobierania synchronicznego - Należy używać
httpx.AsyncClientdo 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(),.textlub.contentzależ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
- Klienty HTTP dla agentów: httpx i requests
- Parsowanie HTML za pomocą BeautifulSoup
- Obsługa paginacji i treści dynamicznych
- Odpowiedzialne praktyki web scrapingu