HTTP-pyynnöt requestsillä ja httpx:llä
Noutakaa verkkosivuja ja käsitelkää uudelleenohjauksia, istuntoja ja otsakkeita.
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"]) # octocatKyselyparametrit 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 stringPOST 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.
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
- HTTP-pyynnöt requestsillä ja httpx:llä
- HTML:n jäsentäminen BeautifulSoupilla
- Scrapy-hämähäkin rakentaminen
- JavaScriptin ja raapimisen estotoimien käsittely