Python Academy · Lektion

HTTP-anrop med requests och httpx

Hämta webbsidor och hantera omdirigeringar, sessioner och headers.

Lektion 1 av 413 steg

HTTP-anrop med requests och httpx är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.

requests-biblioteket

requests är standardbiblioteket för synkrona HTTP-anrop. Det är enkelt, väl beprövat och perfekt för skript och enstaka API-anrop.

# pip install requests
import requests

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

Frågeparametrar och headers

Skicka frågeparametrar med params= och anpassade headers 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-body

Skicka JSON-data med json= – requests anger automatiskt 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())

Sessionsobjekt

Använd en requests.Session för att bevara headers, cookies och anslutningspoolning mellan flera anrop.

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

Tidsgränser och återförsök

Ange alltid en tidsgräns. Använd urllib3.util.retry.Retry med en HTTPAdapter för automatiska återförsö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)

Hantera fel

Anropa r.raise_for_status() för att kasta ett HTTPError vid 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")

Ladda ner filer

Strömma nedladdningar av stora filer med stream=True för att undvika att läsa in allt 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 – modern asynkron HTTP

httpx har samma API som requests men stöder asynkron kod. Använd det i FastAPI-appar och asynkrona arbetsflöden.

# 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

Dela en enda AsyncClient mellan anrop för anslutningspoolning. Skapa den vid uppstart och stäng den vid avstängning.

import httpx, asyncio

CLIENT: httpx.AsyncClient | None = None

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

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

Hjälpmedel för autentisering

Både requests och httpx stöder autentiseringshjälpmedel: auth=(user, pass) för Basic-autentisering och anpassade Auth-klasser för 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")

Simulera HTTP i tester

Använd respx (för httpx) eller responses (för requests) för att simulera HTTP-anrop 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}]

Snabbtest

Vad gör response.raise_for_status()?

Sammanfattning

Använd requests för synkron HTTP. Använd httpx när asynkron kod behövs. Ange alltid tidsgränser, använd sessioner för att återanvända anslutningar, anropa raise_for_status() och strömma nedladdningar av stora filer. Simulera HTTP i tester med respx eller responses.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
76
Lektioner
320

Vanliga frågor

Är lektionen ”HTTP-anrop med requests och httpx” gratis?

Ja – hela texten till ”HTTP-anrop med requests och httpx” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”HTTP-anrop med requests och httpx”?

Hämta webbsidor och hantera omdirigeringar, sessioner och headers. Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Python Academy?

Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”HTTP-anrop med requests och httpx”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Python Academy-lektionen?

Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. HTTP-anrop med requests och httpx
  2. Tolka HTML med BeautifulSoup
  3. Bygga en Scrapy-spindel
  4. Hantera JavaScript och åtgärder mot skrapning
← Tillbaka till Python Academy