Python Academy · Oppitunti

HTTP-pyynnöt requestsillä ja httpx:llä

Noutakaa verkkosivuja ja käsitelkää uudelleenohjauksia, istuntoja ja otsakkeita.

Oppitunti 1/413 vaihetta

HTTP-pyynnöt requestsillä ja httpx:llä on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.

requests-kirjasto

requests on vakiintunut synkroninen HTTP-kirjasto. Se on yksinkertainen, taistelut testattu ja erinomainen komentosarjoihin sekä yksittäisiin API-kutsuihin.

# pip install requests
import requests

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

Kyselyparametrit ja otsakkeet

Välittäkää kyselyparametrit käyttämällä params=-parametria ja mukautetut otsakkeet käyttämällä headers=-parametria.

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 JSON-rungon kanssa

Lähettäkää JSON-dataa käyttämällä json=-parametria — requests määrittää Content-Type: application/json -otsakkeen automaattisesti.

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

Istunto-oliot

Käyttäkää requests.Session-istuntoa otsakkeiden, evästeiden ja yhteyspoolin säilyttämiseen useiden pyyntöjen ajan.

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

Aikakatkaisut ja uudelleenyritykset

Asettakaa aina aikakatkaisu. Käyttäkää urllib3.util.retry.Retry-luokkaa yhdessä HTTPAdapter-sovittimen kanssa automaattisiin uudelleenyrityksiin.

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)

Virheiden käsittely

Kutsukaa r.raise_for_status()-metodia, jotta 4xx/5xx-vastauksista nostetaan HTTPError-poikkeus.

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

Tiedostojen lataaminen

Suoratoistakaa suurten tiedostojen lataukset käyttämällä stream=True-asetusta, jotta kaikkea ei ladata muistiin.

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 — moderni asynkroninen HTTP

httpx-kirjastolla on sama ohjelmointirajapinta kuin requests-kirjastolla, mutta se tukee asynkronisuutta. Käyttäkää sitä FastAPI-sovelluksissa ja asynkronisissa työnkuluissa.

# 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

Jakakaa yksi AsyncClient-asiakasohjelma pyyntöjen kesken yhteyspoolin hyödyntämiseksi. Luokaa se käynnistyksen yhteydessä ja sulkekaa sammutuksen yhteydessä.

import httpx, asyncio

CLIENT: httpx.AsyncClient | None = None

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

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

Todennuksen apuvälineet

Sekä requests että httpx tukevat todennuksen apuvälineitä: auth=(user, pass) Basic-todennukseen ja mukautettuja Auth-luokkia tunnustodennukseen.

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

HTTP-kutsujen mockaus testeissä

Käyttäkää respx-kirjastoa (httpx:ää varten) tai responses-kirjastoa (requests-kirjastoa varten) HTTP-kutsujen mockaamiseen testeissä.

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

Pikatarkistus

Mitä response.raise_for_status() tekee?

Kertaus

Käyttäkää requests-kirjastoa synkroniseen HTTP-viestintään. Käyttäkää httpx-kirjastoa, kun tarvitaan asynkronisuutta. Asettakaa aina aikakatkaisut, käyttäkää istuntoja yhteyksien uudelleenkäyttöön, kutsukaa raise_for_status()-metodia ja suoratoistakaa suuret lataukset. Mockatkaa HTTP-kutsut testeissä respx- tai responses-kirjastolla.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
76
Oppitunnit
320

Usein kysytyt kysymykset

Onko oppitunti ”HTTP-pyynnöt requestsillä ja httpx:llä” ilmainen?

Kyllä – oppitunnin ”HTTP-pyynnöt requestsillä ja httpx:llä” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”HTTP-pyynnöt requestsillä ja httpx:llä”?

Noutakaa verkkosivuja ja käsitelkää uudelleenohjauksia, istuntoja ja otsakkeita. Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Python Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”HTTP-pyynnöt requestsillä ja httpx:llä”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Python Academy-oppitunnilla?

Kyllä. Jokainen Python Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. HTTP-pyynnöt requestsillä ja httpx:llä
  2. HTML:n jäsentäminen BeautifulSoupilla
  3. Scrapy-hämähäkin rakentaminen
  4. JavaScriptin ja raapimisen estotoimien käsittely
← Takaisin: Python Academy