Żądania HTTP za pomocą requests i httpx
Proszę pobierać strony internetowe oraz obsługiwać przekierowania, sesje i nagłówki.
Żądania HTTP za pomocą requests i httpx to bezpłatna lekcja Python Academy 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 Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.
Biblioteka requests
requests to standardowa synchroniczna biblioteka HTTP. Jest prosta, sprawdzona w praktyce i idealna do skryptów oraz jednorazowych wywołań interfejsów API.
# pip install requests
import requests
r = requests.get("https://api.github.com/users/octocat")
print(r.status_code) # 200
print(r.json()["login"]) # octocatParametry zapytania i nagłówki
Parametry zapytania należy przekazywać za pomocą params=, a niestandardowe nagłówki za pomocą headers=.
import requests
r = requests.get(
"https://api.example.com/search",
params={"q": "python", "page": 1},
headers={"Authorization": "Bearer my-token"}
)
print(r.url) # full URL with query stringPOST z treścią JSON
Dane JSON należy wysyłać za pomocą json= — requests automatycznie ustawia Content-Type: application/json.
import requests
r = requests.post(
"https://api.example.com/users",
json={"name": "Alice", "email": "alice@example.com"}
)
print(r.status_code) # 201
print(r.json())Obiekty sesji
Obiektu requests.Session należy używać do zachowywania nagłówków, plików cookie i puli połączeń między wieloma żądaniami.
import requests
with requests.Session() as s:
s.headers.update({"Authorization": "Bearer token"})
users = s.get("https://api.example.com/users").json()
profile = s.get("https://api.example.com/me").json()Limity czasu i ponowienia
Zawsze należy ustawiać limit czasu. Do automatycznego ponawiania żądań należy używać urllib3.util.retry.Retry wraz z HTTPAdapter.
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
s = requests.Session()
retry = Retry(total=3, backoff_factor=1)
s.mount("https://", HTTPAdapter(max_retries=retry))
r = s.get("https://api.example.com/data", timeout=5)Obsługa błędów
Wywołanie r.raise_for_status() powoduje zgłoszenie wyjątku HTTPError dla odpowiedzi 4xx/5xx.
import requests
try:
r = requests.get("https://api.example.com/data")
r.raise_for_status()
data = r.json()
except requests.HTTPError as e:
print(f"HTTP error: {e.response.status_code}")
except requests.ConnectionError:
print("Network unreachable")Pobieranie plików
Duże pliki należy pobierać strumieniowo za pomocą stream=True, aby uniknąć wczytywania całości do pamięci.
import requests
with requests.get("https://example.com/large.zip", stream=True) as r:
r.raise_for_status()
with open("large.zip", "wb") as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)httpx — nowoczesne asynchroniczne HTTP
httpx ma taki sam interfejs API jak requests, ale obsługuje operacje asynchroniczne. Należy używać go w aplikacjach FastAPI i asynchronicznych przepływach pracy.
# pip install httpx
import httpx
# Synchronous:
r = httpx.get("https://httpbin.org/get")
print(r.json())
# Asynchronous:
import asyncio
async def main():
async with httpx.AsyncClient() as c:
r = await c.get("https://httpbin.org/get")
print(r.json())
asyncio.run(main())httpx AsyncClient
Pojedynczy obiekt AsyncClient należy współdzielić między żądaniami, aby korzystać z puli połączeń. Należy utworzyć go podczas uruchamiania aplikacji i zamknąć podczas jej zamykania.
import httpx, asyncio
CLIENT: httpx.AsyncClient | None = None
async def startup():
global CLIENT
CLIENT = httpx.AsyncClient(timeout=10)
async def shutdown():
await CLIENT.aclose()Mechanizmy pomocnicze uwierzytelniania
Zarówno requests, jak i httpx obsługują pomocnicze mechanizmy uwierzytelniania: auth=(user, pass) w przypadku uwierzytelniania Basic oraz niestandardowe klasy Auth w przypadku uwierzytelniania tokenem.
import httpx
class BearerAuth(httpx.Auth):
def __init__(self, token): self.token = token
def auth_flow(self, request):
request.headers["Authorization"] = f"Bearer {self.token}"
yield request
async with httpx.AsyncClient(auth=BearerAuth("my-token")) as c:
r = await c.get("https://api.example.com/me")Mockowanie HTTP w testach
Do mockowania wywołań HTTP w testach należy używać respx (dla httpx) lub responses (dla requests).
# pip install respx
import httpx, respx, asyncio
@respx.mock
async def test_api():
respx.get("https://api.example.com/users").mock(
return_value=httpx.Response(200, json=[{"id":1}])
)
async with httpx.AsyncClient() as c:
r = await c.get("https://api.example.com/users")
assert r.json() == [{"id": 1}]Szybkie sprawdzenie
Co robi response.raise_for_status()?
Podsumowanie
Do synchronicznej komunikacji HTTP należy używać requests. Gdy potrzebna jest obsługa asynchroniczna, należy użyć httpx. Zawsze należy ustawiać limity czasu, używać sesji w celu ponownego wykorzystania połączeń, wywoływać raise_for_status() oraz strumieniowo pobierać duże pliki. Wywołania HTTP w testach należy mockować za pomocą respx lub responses.
Ucz się Python dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 76
- Lekcje
- 320
Często zadawane pytania
Czy lekcja „Żądania HTTP za pomocą requests i httpx” jest bezpłatna?
Tak — pełny tekst „Żądania HTTP za pomocą requests i httpx” 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 Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Żądania HTTP za pomocą requests i httpx”?
Proszę pobierać strony internetowe oraz obsługiwać przekierowania, sesje i nagłówki. Ćwiczysz Python Academy 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ąć Python Academy?
Nie wymagamy żadnego doświadczenia. Python Academy 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 „Żądania HTTP za pomocą requests i httpx”?
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 Python Academy?
Tak. Każda lekcja Python Academy 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
- Żądania HTTP za pomocą requests i httpx
- Parsowanie HTML za pomocą BeautifulSoup
- Budowanie spidera Scrapy
- Obsługa JavaScriptu i zabezpieczeń przed scrapingiem