HTTP-anrop med requests och httpx
Hämta webbsidor och hantera omdirigeringar, sessioner och headers.
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"]) # octocatFrå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 stringPOST 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.
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
- HTTP-anrop med requests och httpx
- Tolka HTML med BeautifulSoup
- Bygga en Scrapy-spindel
- Hantera JavaScript och åtgärder mot skrapning