Python Academy · Lekcja

Żądania HTTP za pomocą requests i httpx

Proszę pobierać strony internetowe oraz obsługiwać przekierowania, sesje i nagłówki.

Lekcja 1 z 413 kroki

Żą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"])   # octocat

Parametry 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 string

POST 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.

Bezpłatny start

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

  1. Żądania HTTP za pomocą requests i httpx
  2. Parsowanie HTML za pomocą BeautifulSoup
  3. Budowanie spidera Scrapy
  4. Obsługa JavaScriptu i zabezpieczeń przed scrapingiem
← Powrót do Python Academy