Python Academy · leksjon

HTTP-forespørsler med requests og httpx

Hent nettsider, og håndter omdirigeringer, økter og headere.

Leksjon 1 av 413 trinn

HTTP-forespørsler med requests og httpx er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.

requests-biblioteket

requests er standardbiblioteket for synkron HTTP. Det er enkelt, velprøvd og perfekt for skript og enkeltstående API-kall.

# pip install requests
import requests

r = requests.get("https://api.github.com/users/octocat")
print(r.status_code)   # 200
print(r.json()["login"])   # octocat

Spørringsparametere og headere

Send spørringsparametere med params= og egendefinerte headere med 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 med JSON-innhold

Send JSON-data med json= – requests setter automatisk 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())

Sesjonsobjekter

Bruk en requests.Session til å bevare headere, informasjonskapsler og tilkoblingspooling på tvers av flere forespørsler.

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

Tidsavbrudd og nye forsøk

Angi alltid et tidsavbrudd. Bruk urllib3.util.retry.Retry sammen med en HTTPAdapter for automatiske nye forsøk.

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)

Håndtering av feil

Kall r.raise_for_status() for å utløse en HTTPError ved 4xx/5xx-svar.

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

Nedlasting av filer

Strøm store filnedlastinger med stream=True for å unngå å laste alt inn i minnet.

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 – moderne asynkron HTTP

httpx har samme API som requests, men støtter asynkron kjøring. Bruk det i FastAPI-apper og asynkrone arbeidsflyter.

# 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

Del én enkelt AsyncClient mellom forespørsler for tilkoblingspooling. Opprett den ved oppstart, og lukk den ved avslutning.

import httpx, asyncio

CLIENT: httpx.AsyncClient | None = None

async def startup():
    global CLIENT
    CLIENT = httpx.AsyncClient(timeout=10)

async def shutdown():
    await CLIENT.aclose()

Hjelpere for autentisering

Både requests og httpx støtter autentiseringshjelpere: auth=(user, pass) for Basic-autentisering og egendefinerte Auth-klasser for tokenautentisering.

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

Mocking av HTTP i tester

Bruk respx (for httpx) eller responses (for requests) til å mocke HTTP-kall i tester.

# 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}]

Hurtigsjekk

Hva gjør response.raise_for_status()?

Oppsummering

Bruk requests for synkron HTTP. Bruk httpx når asynkron kjøring er nødvendig. Angi alltid tidsavbrudd, bruk sesjoner for gjenbruk av tilkoblinger, kall raise_for_status(), og strøm store nedlastinger. Mock HTTP i tester med respx eller responses.

Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
76
Leksjoner
320

Ofte stilte spørsmål

Er leksjonen «HTTP-forespørsler med requests og httpx» gratis?

Ja – hele teksten i «HTTP-forespørsler med requests og httpx» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «HTTP-forespørsler med requests og httpx»?

Hent nettsider, og håndter omdirigeringer, økter og headere. Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Python Academy?

Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «HTTP-forespørsler med requests og httpx»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?

Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. HTTP-forespørsler med requests og httpx
  2. Analysere HTML med BeautifulSoup
  3. Bygge en Scrapy-spider
  4. Håndtere JavaScript og tiltak mot scraping
← Tilbake til Python Academy